题解 | #子串计算#
子串计算
http://www.nowcoder.com/practice/bcad754c91a54994be31a239996e7c11
#include<iostream> #include<map> #include<string> using namespace std; int main(){ map<string, int >myMap; string str; cin>>str; for(int i = 0; i < str.size(); i++){ for(int j = i; j < str.size(); j++){ myMap[str.substr(i,j-i+1)]++; } } for(map<string, int>::iterator it = myMap.begin(); it != myMap.end(); it++){ if(it->second>1) cout<<it->first<<" "<<it->second<<endl; } return 0; }
使用map来定义字符串到int的映射,int的初始值自动是0
遍历字符串的所有子串,然后利用map进行计数,最后输出即可。
要注意map底层使用红黑树来实现,所以map的排序刚好是按照string的字典序进行排序,和题目符合。