この 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 のままである Sunday Search を使用して、独自の部分文字列の一致も試しました。私は学生ではないので、宿題の手伝いは求めていません。私は働く専門家です。ACM の問題を解決することは、私の趣味です。
助けてください。