我正在尝试解决这个 ACM 问题(10298 - Power Strings
):http ://uva.onlinejudge.org/external/102/10298.html
问题是在另一个字符串中找到最小周期字符串。例如:
测试输入:
abcd
aaaa
ababab
测试输出:
1
4
3
我的想法是:
- 设
s
为输入字符串; ss
从中创建一个字符串s+s
,并移动第一个字符;s
在 string 中查找第一次出现的ss
。
下面是我的代码:
inline int GetLargestN(const char* cs)
{
string s(cs);
string ss(s, 1); ss += s; ss += s[0];
int len = s.length();
int pos = ss.find(s);
return len/(pos+1);
}
http://www.cplusplus.com/reference/string/string/find/ string::find 应该是 O(n)
但是,我不断收到超过时间限制
笔记:
我还使用周日搜索尝试了自己的
find
子字符串匹配,其时间复杂度也是 O(n),但仍然是 TLE。我不是学生,所以我不要求家庭作业帮助。我是一个工作的专业人士。解决 ACM 问题只是我的爱好。
请帮忙。