字串计算 题解

A. 子串计算

题目描述

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

输入格式

一行,一个01字符串。

输出格式

对所有出现次数在1次以上的子串,输出该子串及出现次数,中间用单个空格隔开。
按子串的字典序从小到大依次输出,每行一个。


详解

定义一个 map ,用 string 映射 int

将输入的字符串进行枚举,再用 substr 去选取子串,累计每个子串出现的次数:

mp[s.substr(l,r-l+1)]++;
//选取区间[l,r]的字符,l为起点,r为终点,其中r-l+1为该区间内字符数量

由于 map 中的元素会根据键值自动实现排序,而不会受到存储顺序的影响,所以可以实现题目中的“按子串的字典序从小到大依次输出”

所以我们去遍历,大于1的直接输出:

map<string,int>::iterator it=mp.begin();
for(it=mp.begin();it!=mp.end();it++){
    	if(it->second>1){//判断该子串出现次数是否大于1
    		cout<<it->first<<" "<<it->second<<endl; //分别输出该子串以及该子串出现的次数
		}
	}  

还是很简单的

3 个赞

加个auto就好了

2 个赞

addd

1 个赞