原題目:
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:本題中,我們將空字符串定義爲有效的迴文串。
示例 1:
輸入: “A man, a plan, a canal: Panama”
輸出: true
示例 2:
輸入: “race a car”
輸出: false
思路:
1.先用for循環遍歷原字符串,用函數將字母和數字分別提取出來存放在另一個字符串
2.用翻轉函數將保存的字符串反轉存放在另一個數組中
3.返回兩個字符串的比較
代碼(函數實現):
class Solution {
public:
bool isPalindrome(string s) {
string s1;
for (char c: s) {
if (isalnum(c)) {
s1 += tolower(c);
}
}
string s1_rev(s1.rbegin(), s1.rend());
return s1 == s1_rev;
}
};
注意:
1.
for (char c: s) 相當於
for( int i = 0; i < s.length(); i++)
{
c=s[i];
}
2.isalnum©函數是判斷字符是否是字母或者數字
3.tolower©函數是將字母大寫轉小寫
4. string s1_rev(s1.rbegin(), s1.rend());是反轉函數,將s1從尾部到頭部進行反轉
rbegin
語法:const reverse_iterator rbegin();
解釋:rbegin()返回一個逆向迭代器,指向字符串的最後一個字符。
rend
語法:const reverse_iterator rend();
解釋:rend()函數返回一個逆向迭代器,指向字符串的開頭(第一個字符的前一個位置)。
參考了
https://blog.csdn.net/z2014jw/article/details/50810569