タイトルリンク:leetcode。
もう一度暴力を始めます。弦の長さが範囲内であれば[0, 100000]
、O(n ^ 2)は通過できるはずです。
時間O(n ^ 2)スペースO(n)
/*
执行用时:48 ms, 在所有 C++ 提交中击败了8.40%的用户
内存消耗:334.2 MB, 在所有 C++ 提交中击败了5.04%的用户
*/
class Solution {
public:
bool isFlipedString(string s1, string s2) {
int M = s1.size(), N = s2.size();
if(M != N)
return false;
int i = 0;
while(i < M && s1.substr(i, M - i) != s2.substr(0, M - i))
{
i++;
}
//不必判断下面这个,否则两个空字符串就返回false了
// if(i == M)
// return false;
return s1.substr(0, i) == s2.substr(M - i, i);
}
};
実際、O(n ^ 2)O(n)s3 = s1 + s1
がに含まれているかどうかを判断するより簡単な方法がありますs2
/*
执行用时:4 ms, 在所有 C++ 提交中击败了91.01%的用户
内存消耗:7.8 MB, 在所有 C++ 提交中击败了50.10%的用户
*/
class Solution {
public:
bool isFlipedString(string s1, string s2) {
int M = s1.size(), N = s2.size();
if(M != N)
return false;
string s3 = s1 + s1;
return s3.find(s2) != string::npos; //注意,没找到会返回string::npos
}
};
ほぼそこに、時間計算量の少ないKMPアルゴリズムがありますが、私はそれを気にしないでください、ああああああ、
次回は間違いなくஇ௰இ