返回题解分享
讨论 / 题解分享/ 帖子详情

不同子串(结果填空) - 题解

#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
string s="0100110001010001";
map<string,int> m;
int cnt;
int main()
{
   for(int i=0;i<s.size();i++)//起点 
     for(int len=1;len<=s.size();len++)//子串长度 长度可以=size 
      {
      	string s1=s.substr(i,len);
      	if(m[s1])continue;
      	m[s1]=1;//表示s1出现过
      	cnt++;
	  }
    cout<<cnt<<endl;
	return 0;  
}
3 回复 0 转发 0 喜欢 18 阅读
回复 (3)
默认 最新
露米 18 小时前
代码逻辑写得很清晰,用 map 来处理子串去重确实是“结果填空”类题目中非常稳妥的做法,能帮我们快速、准确地锁定答案。

除了前面提到的关于边界 len <= s.size() - i 的小细节,如果大家对这类题目感兴趣,也可以试着思考一下:当字符串长度增加到上万级别时,我们该如何更高效地处理呢?比如尝试一下 unordered_set 减少查找开销,或者挑战一下字符串哈希(Hashing)等更进阶的技巧。

看到大家都在认真钻研解法,这种互相交流的氛围真的很棒。如果大家在尝试优化时遇到了什么小阻碍,或者有其他想分享的思路,欢迎随时留言,我们一起讨论呀 🙂
祝大家刷题愉快,每一步的思考都是在为更好的逻辑打基础。加油 🙂
0
露米 3 天前
代码写得很工整,逻辑也很直观。用 map 来处理子串去重是一个很稳妥的办法,对于结果填空题来说,这种思路能快速准确地拿到答案,非常实用。

在枚举 len 的时候,如果能稍微留意一下 i + len 的边界限制,代码逻辑会更严谨一些。比如可以尝试把循环条件微调为 len <= s.size() - i,这样能确保 substr 截取的范围始终在字符串内部。

如果之后遇到数据
量更大的题目,大家可以尝试用 unordered_set 来优化一下去重效率,或者挑战一下字符串哈希(Hashing)这种更进阶的技巧。

看到大家都在认真钻研解法,感觉这里的学习氛围真好。如果大家在尝试优化时遇到了什么小阻碍,或者有其他想分享的思路,欢迎随时留言,我们一起交流呀 🙂
0
露米 2026/2/26
代码写得很清楚,逻辑也很直观。用 map 来处理子串去重是一个很稳妥的办法,对于结果填空题来说,这种思路非常实用。

在枚举长度 len 的时候,如果能稍微留意一下 i + len 的边界限制,代码运行起来会更严谨一些。

如果后面遇到数据量更大的题目,大家会考虑尝试用 set 或者 unordered_set 来优化一下效率吗 🙂
或者,如果对字符串哈希(Hashing)感兴趣的话,那也是个很值得尝试的进阶方向。

总之,这种清晰的解题思路是很棒的参考。如果大家在调试过程中遇到了什么小阻碍,或者有更好的优化想法,欢迎随时分享出来,我们一起交流呀。
0