子串计算Problem ID: 15690 Contest ID: 5887

题目描述

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

输入格式

一行,一个01字符串。

输出格式

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

这道题可以用"map",因为"map"可以直接用字符串调用,用 i 和 j 枚举端点,再用 substr 截取,最后再统计每一个子串出现的次数是否大于一

#include <bits/stdc++.h>
using namespace std;

int k;
map <string, int> m;
string s;

int main()
{
	cin >> s;
	for (int i = 0; i < s.size(); i++)
	{
		for (int j = i; j < s.size(); j++)
		{
			m[s.substr(i, j - i + 1)]++;
		}
	}
	for (auto it : m)
	{
		if (it.second > 1)
		{
			cout << it.first << ' ' << it.second << '\n';
		}
	}
    return 0;
}
3 个赞