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