PS : (与本题无关)对于一些题 若键和值是一对一的 可进行双向映射 如m[a] = b ; m[b] = a;
题目描述
给出一个01字符串(长度不超过100),求其每一个子串出现的次数
输入描述:
输入包含多行,每行一个字符串。
输出描述:
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
输入
10101
输出
0 2
01 2
1 3
10 2
101 2
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,str;
map<string,int> m;
while(cin>>s){
for(int i=0;i<s.size();i++){
for(int j=1;j<=s.size()-i;j++){
str=s.substr(i,j);
if(m.find(str)==m.end()) m[str]=1;
else m[str]++;
}
}
map<string,int>::iterator it;
for(it=m.begin();it!=m.end();it++){
if(it->second>1) cout<<it->first<<" "<<it->second<<endl;
}
}
}