输出字符串所有的子串

思路:(1)通过字符串的总长度,可知它的所有子串的长度分布范围

            (2)按子串长度分类,依次找出每个长度段的所有子串

关键函数:substr

void FindStr(const string&str)
{
	string sub;
	int len = str.length();
	for (int i = 1; i <= len; i++)//用i控制子串的长度
	{
		for (int j = 0; j < len; j++)//用j标识从什么位置开始提取子串
		{
			if (i + j <= len)
			{
                               // 在字符串 str 中,从位置 j 开始提取长度为 i 的子串
				sub = str.substr(j, i);
				cout << sub << endl;
			}
		}
	}
}



### 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)` 组合都会对应唯一的一个子串。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值