Codeup墓地-2074

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值