做网站运营这工作怎么样,hs网站推广,wordpress 页面添加js,动漫建模需要学什么软件目录地址
前言
其实可以不用哈希的#xff0c;好像会更慢。还有之前看错题了#xff0c;所以会有些奇怪的地方 正题
给出一个字符串#xff0c;求最长的至少出现过两次的子串 输入输出#xff08;需要自取#xff09;
Input
输入文件ygas.in第一行包含该字符串。数据…目录地址
前言
其实可以不用哈希的好像会更慢。还有之前看错题了所以会有些奇怪的地方 正题
给出一个字符串求最长的至少出现过两次的子串 输入输出需要自取
Input
输入文件ygas.in第一行包含该字符串。数据保证该字符串非空由小写字母组成且其长度不超过100。
Output
输出文件ygas.out包含一个数代表至少出现两次的最长子串的长度。
Sample Input
【输入样例1】
abcd
【输入样例2】
ababa
【输入样例3】
zzz
Sample Output
【输出样例1】
0
【输出样例2】
3
【输出样例3】
3 解题思路
请无视哈希。还有我手动打了一个find查找该字符串出现过的次数因为前面看错题了又懒得改。 代码
#includecstdio
#includestring
#includeiostream
#includealgorithm
using namespace std;
const int p29989;
string s,hash[p1],fs;
int n,sum;
int hashmath(string x)
{int ans0;for (int i0;ix.size();i){ans(ans*27x[i]-96)%p;}return ans%p;
}
int locate(string x)
{int wzhashmath(x);int i0;while (ip hash[(wzi)%p]!x hash[(wzi)%p]!)i;return (wzi)%p;
}
int headfind(string fs)//手动查找
{int lfs.size(),S0;bool flag;for (int i0;in;i){if (s[i]fs[0])//对头{flagtrue;for (int j1;jl;j)if (s[ij]!fs[j])//往后搜{flagfalse;break;}if (flag) S;}}return S;
}
int main()
{//freopen(ygas.in,r,stdin);//freopen(ygas.out,w,stdout);cins;ns.size();for (int i0;in;i){fs;for (int ji;jn;j){fss[j];int wzlocate(fs);if (hash[wz]){hash[wz]fs;if (headfind(fs)2)//出现次数超过2次{int lfs.size();summax(sum,l);//更新最优解}}}}if (sum!0) printf(%d,sum);else printf(0);return 0;
}