題目:
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的回文串。
函式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)存在於標頭中。
參考連線:
c 庫函式 - tolower()
c 標準庫 - 描述
c 庫函式 int tolower(int c) 把給定的字母轉換為小寫字母。
宣告
下面是 tolower() 函式的宣告。
int tolower(int c);
引數
c – 這是要被轉換為小寫的字母。
返回值
如果 c 有相對應的小寫字母,則該函式返回 c 的小寫字母,否則 c 保持不變。返回值是乙個可被隱式轉換為 char 型別的 int 值。
參考連線:
題解思路:使用雙指標
**第一,**左右指標分別指向 str的兩側;
**第二,**不斷地將這兩個指標相向移動,每次移動一步,並判斷這兩個指標指向的字元是否相同;
**第三,**當這兩個指標相遇時,就說明 str是回文串。
函式**:
class
solution
}int n=str.
size()
;int left=
0, right=n-1;
while
(left < right)
++left;
--right;
}return
true;}
};
方法二:利用c++函式庫翻轉,在判斷字串前後是否相等。最簡單的方法是對字串 ss 進行一次遍歷,並將其中的字母和數字字元進行保留,放在另乙個字串 sgood 中。這樣我們只需要判斷 sgood 是否是乙個普通的回文串即可。
用語言中的字串翻轉 api 得到 sgood 的逆序字串 sgood_rev,只要這兩個字串相同,那麼 sgood 就是回文串。
函式**:
class
solution
} string sgood_rev
(sgood.
rbegin()
, sgood.
rend()
);return sgood == sgood_rev;}}
;
方法三:字串原地前後判斷,雙指標
class
solution
elseif(
!isalnum
(s[right]
)&&left
//tolower大寫字元轉換小寫字元,若小寫字元轉大寫字元是toupper
elseif(
tolower
(s[left])!=
tolower
(s[right]))
else
}return
true;}
};
125 驗證回文串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true示例 2 輸入 race a car 輸出 false解題思路 1 篩選字串,只留下數字和...
125 驗證回文串
125.驗證回文串 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false class ...
125 驗證回文串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false string的size 函式和l...