Leetcode 125. 验证回文串
思路
首先想到的就是用两个指针i,j分别从前后出发,利用多个if-else判断,但这样情况比较多,很容易漏了某种情况,导致一直调试不好。后来看到一些小伙伴的思路比较简单:先处理一下字符串,将数字和字母保留,而且字母都转换为小写字母,再进行判断。
代码
bool isPalindrome(string s) {
string ss;
bool res = true;
for (char n : s) { //将所有字母或数字都变成小写放进另一个字符串中
if (isalnum(n)) ss += tolower(n);
}
int i = 0;
int j = ss.length() - 1;
while (i < j) { //前后俩指针开始对比
if (ss[i] == ss[j]) {
i++;
j--;
}
else { //如果出现不同字符直接跳出循环
res = false;
break;
}
}
return res;
}
总结
本次用到了在头文件cctype中的几个函数:
- isalnum(ch)判断是否数字或字母
- isalpha(ch)判断时候字母
- isdigit(ch)判断是否数字
- tolower(ch)将字母变为小写字母
- toupper(ch)将字母变为大学字母