125. 驗證迴文串

2020-08-12 00:46:04

題目:
給定一個字串,驗證它是否是迴文串,只考慮字母和數位字元,可以忽略字母的大小寫。

125. 验证回文串

說明:本題中,我們將空字串定義爲有效的迴文串。
函數Isalnum
int isalnum(int c)功能:
檢查字元是否爲字母數位
1.檢查c是十進制數位還是大寫或小寫字母。

2.如果isalpha或isdigit也返回true,則結果爲true。

3.注意,什麼是字母可能取決於所使用的語言環境。在預設的「 C」語言環境中,構成字母的是通過isupper或islower返回true的內容。

4.有關標準ANSI I字元集的每個字元的不同ctype函數返回什麼的詳細圖表,請參見< cctype >檔頭的參考。

5.在C ++中,此函數的特定於語言環境的模板版本(isalnum)存在於檔頭中。
參考連線:http://www.cplusplus.com/reference/cctype/isalnum/
https://www.runoob.com/cprogramming/c-function-isalnum.html

C 庫函數 - tolower()
C 標準庫 - <ctype.h>

描述
C 庫函數 int tolower(int c) 把給定的字母轉換爲小寫字母。

宣告
下面 下麪是 tolower() 函數的宣告。

int tolower(int c);
參數
c – 這是要被轉換爲小寫的字母。
返回值
如果 c 有相對應的小寫字母,則該函數返回 c 的小寫字母,否則 c 保持不變。返回值是一個可被隱式轉換爲 char 型別的 int 值。
參考連線:https://www.runoob.com/cprogramming/c-function-tolower.html

題解思路:使用雙指針
**第一,**左右指針分別指向 str的兩側;
**第二,**不斷地將這兩個指針相向移動,每次移動一步,並判斷這兩個指針指向的字元是否相同;
**第三,**當這兩個指針相遇時,就說明 str是迴文串。

函數程式碼:

class Solution {
public:
    bool isPalindrome(string s) {
        string str;
        for (char ch: s)
        {
            if(isalnum(ch))
            {
                str+=tolower(ch);
            }
        }
        int n=str.size();
        int left=0, right=n-1;
        while (left < right)
        {
           if(str[left]!=str[right]) 
           {
                return false;
            }
            ++left;
            --right;
        }
        return true;
    }
};