1、判断一个字符串是否是回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
链接
code
class Solution {
public:
bool isPalindrome(string s) {
string ss;
for(auto c : s) {
if(isalnum(c)) {
ss += c;
}
}
int i = 0, j = ss.length() - 1;
while(i < j) {
if(toupper(ss[i]) != toupper(ss[j])) {
return false;
}
i++;
j--;
}
return true;
}
};
2、求一个字符串的最长回文串
如题
关键字
最长、回文串,
思路
中心扩散
notes
写写试试
复杂度
时间;O(N平方)
空间:O(1)
code
class Solution {
public:
string center(string s,int c1, int c2){
int l = c1;
int r = c2;
int n = s.size();
while(l >= 0 && r <n &&s[l] == s[r]){
l--;
r++;
}
return s.substr(l + 1,r -l - 1);
}
string longestPalindrome(string s) {
// write code here
int n = s.size();
if(n == 0) return "";
string longest = s.substr(0,1);
for(int i = 0; i < n -1; i++){
string s1 = center(s,i,i);
if(s1.size() > longest.size()){
longest = s1;
}
string s2 = center(s,i,i+1);
if(s2.size() > longest.size()){
longest = s2;
}
}
return longest;
}
};