回文
回文是一个正着读和反着读都一样的字符串,如madam、我爱我、abba等。
判断回文的两种解法
解法1
从字符串的两边向中间判断字符串是否是回文。
bool isPalindrome(string s) {
if (s.empty()) return false;
int l = 0, r = s.size()-1;
while (l < r) {
if (s[l] != s[r]) return false;
l++; r--;
}
return true;
}
时间复杂度为O(n),空间复杂度为O(1)。
解法2
从字符串的中间向两边判断字符串是否是回文,必须考虑字符串长度的奇偶性。
// 版本1
bool isPalindrome(string s) {
if (s.empty()) return false;
int len = s.size();
int l = 0, r = 0;
if (len % 2== 0) {
r = len/2;
l = r - 1;
} else {
r = l = len/2;
}
while (l >= 0 && r < len) {
if (s[l] != s[r]) return false;
l--; r++;
}
return true;
}
版本2
bool isPalindrome(string s) {
if (s.empty()) return false;
int len = s.size();
int m = ((len >> 1) - 1) >= 0 ? (len >> 1) - 1 : 0;
int l = m, r = len - 1 - m;
while (l >= 0 && r < len) {
if (s[l] != s[r]) return false;
l--; r++;
}
return true;
}
时间复杂度为O(n),空间复杂度为O(1)