题意:
给定一个字符串,输出该串中出现次数最多的长度为 \(k\) 的子串;
思路:
本来想着写哈希的,但是打完预处理哈希值就懒得写了,想到构造个映射直接映射出出现次数,但是取子串的复杂度理论上是 \(O(n)\) 的,就照着这个思路写了个 map 的方法,然后竟然得了 \(80\) 分,换成 unordered_map 就过了,中间还傻逼似的把 \(substr\) 的第二个参数当成了尾下标。
代码:
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,int>m;
int main()
{
string s;cin>>s;
int len;cin>>len;
for(int i=len;s[i-1];i++)
{
m[s.substr(i-len,len)]++;
}
// for(int i=len;s[i-1];i++)
// {
// cout<<s.substr(i-len,len)<<" ";
// }
int ans=-1;
for(int i=len;s[i];i++)
{
ans=max(ans,m[s.substr(i-len,len)]);
}
cout<<ans;
system("pause");
}