求字符串的所有子串

求字符串的所有子串,子串是保持原来的字符串的顺序的,如下面问题:
给定一个字符串,输出其所有连续子串,如:给定字符串为abcd,则要输出的其全部连续子串为:a,b,c,d,ab,bc,cd,abc,bcd,abcd。
思路:
1. 用递归法
尝试用递归法,但结果没分析出,不知道思路
2. 非递归方法
输出数据如上述 a,b,c,d,ab,bc,cd,abc,bcd,abcd 来写算法,但是代码输出结果并不是上述的结果

```
public static void solve(char[] arr){
    for(int i = 0;i<arr.length;i++)
          for(int j=i;j<arr.length;j++)
            for(int m =i; m<=(m+j) && m<arr.length;m++){
                //if(m == arr.length)
                    //return;
              System.out.println(arr[m]);
             // System.out.println();
            } 
    System.out.println();

}
```

输出数据如上述 a,ab,abc,b,bc,bcd,c,cd,d, abcd 来写算法,并参考其他博客

```
static void find(char[] arr, int high){
int i, j, k;
    for(i =0;i<= high;i++){
        for(j = i;j<=high;j++){
            //String str,str1 = "";
            for(k = i; k<=j;k++){
                String str ="";
                 str += String.valueOf(arr[k]);
                //str1 += str;

                //arr[k] += arr[k];
                System.out.println(str);
                //str1 = str;

            }
            System.out.println();
        }
        System.out.println();
    }
}
```

还有一种方式,该方式使用java 中的类string对象的substring方法,代码如下:


static void findAllSubstrings(String str,int length){
for(int i = 0 ; i < length ; i++ ){
for(int j = 1 ; j <= length - i ; j++ ){
String sub = str.substring(i, i+j);
System.out.println(sub);
}
}
}

**参考:**
1. http://www.cnblogs.com/huanglei/p/3677707.html
2. http://blog.sina.com.cn/s/blog_402d5d130101otu5.html

注意
本地工程索引:Demo2这个工程中的StringConbine类

### Golang 中生成字符串的所有子串 在 Go 语言中,可以通过双层循环来实现生成字符串的所有子串的功能。以下是具体的实现方法: 通过遍历字符串中的每一个字符作为起始位置 `i` 和结束位置 `j` 的组合,可以提取出所有的子串。这种方法的时间复杂度为 O(n²),其中 n 是输入字符串的长度。 下面是完整的代码示例: ```go package main import ( "fmt" ) func generateAllSubstrings(s string) []string { var substrings []string n := len(s) for i := 0; i < n; i++ { // 遍历起始索引 for j := i + 1; j <= n; j++ { // 遍历终止索引 (注意:j >= i+1) substr := s[i:j] // 提取子串 substrings = append(substrings, substr) } } return substrings } func main() { s := "abc" result := generateAllSubstrings(s) fmt.Println(result) // 输出 ["a" "ab" "abc" "b" "bc" "c"] } ``` 上述代码实现了以下功能: - 外层循环控制子串的起始索引 `i`。 - 内层循环控制子串的结束索引 `j`。 - 使用切片操作 `s[i:j]` 来获取从索引 `i` 到 `j-1` 的子串[^4]。 需要注意的是,在 Python 中可能有更简洁的方法来处理动态规划问题(如引用中的例子),但在 Go 语言中通常会采用显式的双重循环方式来解决问题[^2]。 #### 子串数量计算 对于一个长度为 n 的字符串,其所有可能的子串总数为 \( \frac{n \times (n + 1)}{2} \)[^5]。这是因为每一对 `(i,j)` 组合都会对应唯一的一个子串。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值