题意:

给定一个字符串,输出该串中出现次数最多的长度为 \(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");
}