Codeup墓地-2074
src:http://codeup.cn/problem.php?id=2074
2074: 子串计算
时间限制: 1 Sec 内存限制: 32 MB
题目描述
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
输入
输入包含多行,每行一个字符串。
输出
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
样例输入
1010100001
1010
样例输出
0 6
00 3
000 2
01 3
010 2
1 4
10 3
101 2
1010 2
0 2
1 2
10 2
提示
字符串前缀查找
//给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
//set<struct>写法
#include<bits/stdc++.h>
using namespace std;
struct Node{
string s;
int t;
Node(string _s,int _t):s(_s),t(_t){}
friend bool operator<(Node const &a,Node const &b){
return a.s<b.s;
}
};
int main(){
string line;
while(getline(cin,line)){
set<Node>st;
for(int len=1;len<line.size()-1;len++){
for(int i=0;i+len<line.size();i++){
string s=line.substr(i,len);
int pos,t=0;
string l(line);
while((pos=l.find(s))!=-1){
l=l.replace(0,pos+1,"");
t++;
}
st.insert(Node(s,t));
}
}
while(!st.empty()){
if((*st.begin()).t!=1)
printf("%s %d\n",(*st.begin()).s.c_str(),(*st.begin()).t);
st.erase(st.begin());
}
}
return 0;
}