首页 > 其他 > 详细

10A:子串计算

时间:2020-06-13 15:46:03      阅读:32      评论:0      收藏:0      [点我收藏+]
总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

给出一个只包含0和1的字符串(长度在1到100之间),求其每一个子串出现的次数。

输入
一行,一个01字符串。
输出
对所有出现次数在1次以上的子串,输出该子串及出现次数,中间用单个空格隔开。按子串的字典序从小到大依次输出,每行一个。
样例输入
10101
样例输出
0 2
01 2
1 3
10 2
101 2
 1 #include<iostream>
 2 #include<map>
 3 #include<vector>
 4 using namespace std;
 5 map<string, int>m;
 6 int main(){
 7     string a;
 8     cin>>a;
 9     int i, j;
10     for(i = 0; i < a.length(); i++){
11         for(j = 1; j+i <= a.length(); j++){
12             string ss = a.substr(i,j);
13             m[ss]++;
14         }
15     }
16     map<string, int>::iterator it = m.begin();
17     for(it = m.begin(); it!=m.end(); it++){
18         if(it->second<=1) continue; 
19         cout<<it->first<<" "<<it->second<<endl;
20     }
21     return 0;
22 }

备注:枚举就行了。关键是我对map和string的用法都有点陌生了……我看的一个代码还写了个string数组用来记录子串,但其实完全没必要。

要注意的就是map的迭代器的用法,别忘了orz

还有substr的第一个参数是起点,第二个参数是长度,而用j来枚举长度要注意j最小是1,而最大j+i是可以达到a.length()的

10A:子串计算

原文:https://www.cnblogs.com/fangziyuan/p/13113923.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!