题目链接: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);
}
};
其实有更简便的方法,就是判断s3 = s1 + s1
里是否包含s2
O(n^2) O(n)
/*
执行用时: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的算法时间复杂度更低但我,,,懒得看了啊啊啊啊
下次一定இ௰இ