C 库函数:
string长度: s.length(), s.size()
include <ctype.h>
C 库函数 int tolower(int c) 把给定的字母转换为小写字母。
C 库函数 void isalnum(int c) 检查所传的字符是否是字母和数字。 // 如果 c 是一个数字或一个字母,则该函数返回非零值,否则返回 0。
方法一:
利用字符串,反转字符串后比较
class Solution {
public:
bool isPalindrome(string s) {
string s1;
for(auto ch : s){ // 遍历 string 中每个字符(char)
if(isalnum(ch)){ // 检查所传的字符是否是字母和数字,不是返回0
s1 += tolower(ch); // 字母转换为小写字母
}
}
string m = s1; // copy原字符串s1
reverse(m.begin(),m.end()); // 反转字符串m
return (m==s1)? true:false;
}
};
方法二:
回文是典型的双指针问题,即不停比较字符串左右两端是否相等,一旦遇到不符合条件的直接跳出即可
class Solution {
public:
bool isPalindrome(string s) {
string s1;
for(auto ch : s){ // 遍历 string 中每个字符(char)
if(isalnum(ch)){ // 检查所传的字符是否是字母和数字,不是返回0
s1 += tolower(ch); // 字母转换为小写字母
}
}
int left = 0,right = s1.length()-1; // 定义双指针,指向头尾
while(left<right){
if(s1[left]!=s1[right]){
return false;
}
left++;
right--;
}
return true;
}
};
python:
方法一:
利用字符串,反转字符串后比较
isalnum()函数在python中也有,C库函数 string.tolower() 在 python 中为 string.lower()
class Solution:
def isPalindrome(self, s: str) -> bool:
new = ''.join(e for e in s if e.isalnum()) # 使用一个空字符串合成列表内容生成新的字符串
new = new.lower() # 转换成小写,不改变原string,返回新的,需接收
return True if new == new[::-1] else False
方法二:
回文是典型的双指针问题,即不停比较字符串左右两端是否相等,一旦遇到不符合条件的直接跳出即可
class Solution:
def isPalindrome(self, s: str) -> bool:
new = ''.join(e for e in s if e.isalnum()) # 使用一个空字符串合成列表内容生成新的字符串
new = new.lower() # 转换成小写
left, right = 0, len(new)-1
while left < right:
if new[left] != new[right]:
return False
left += 1
right -= 1
return True