本文主要是介绍子串计算【北京大学】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
牛客网题目链接
直接暴力,用map函数存每个子串出现的次数,子串的类型使用两层循环遍历。
注意字符串的边界问题,这里需要排序所以直接用map
版本1
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cctype>
#include <unordered_map>
#include <map>
using namespace std;
const int N = 105;
typedef pair<int, string> PII;int main(){string str;while(cin>>str){map<string, int> mp;for(int i = 0; i < str.size(); i++){for(int j = i+1; j <= str.size(); j++){string t = str.substr(i, j-i);mp[t]++;}}for(auto x: mp){if(x.second > 1)cout<<x.first<<" "<<x.second<<endl;}}return 0;
}
版本2
#include<bits/stdc++.h>
using namespace std;
int main(){string str;map<string, int> mp;while(cin>>str){mp.clear();for(int i=0; i<str.size(); i++){for(int j=i; j<str.size();j++){string s;for(int k=i; k<=j;k++){ //注意这里要取等号s += str[k];} mp[s]++; }}for(auto it: mp){if(it.second > 1){cout<<it.first<<" "<<it.second<<endl;}}}return 0;
}
这篇关于子串计算【北京大学】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!