题目描述
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
输入描述:
输入包含多行,每行一个字符串。
输出描述:
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
分析
- 使用map<string, int>,键是子串,值是子串出现的次数。
- 重点在于找到每一个子串
for(int i = 1; i <= s.size(); i++){//
for(int j = 0; j < i; j++){
string_counter[s.substr(j, i - j)]++;// substr(j, i - j), 返回以j为起点,i - j为长度的子串
}
}
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(){
string s;
while(cin >> s){
map<string, int> string_counter;
for(int i = 1; i <= s.size(); i++){
for(int j = 0; j < i; j++){
string_counter[s.substr(j, i - j)]++;
}
}
for(map<string, int>::iterator it = string_counter.begin(); it != string_counter.end(); it++){
if(it -> second > 1){
cout << it -> first << " " << it -> second << endl;
}
}
}
return 0;
}