練習題22-驗證迴文串

原題目:
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:本題中,我們將空字符串定義爲有效的迴文串。
示例 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

練習題21-數組加一

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章