125. 驗證迴文串(LeetCode)
阿新 • • 發佈:2021-07-08
- 題目描述
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
示例 1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
- 題目條件分析
- 迴文串是指對稱的字串;
- 只需要考慮字母和數字,忽略大小寫;
- 空字串為有效迴文串;
- 解題思路(指標對撞)
- 定義兩個指標left和right分別指向字串的首尾,如果不相等,則不是(快速失敗),否則一直比較到兩個指標相遇(說明是迴文串)
- 要快速跳過無效字元和比較是否相等,可考慮使用字元的ascii碼來進行判斷;
- 編碼如下
public boolean isPalindrome(String s) { char[] charArray = s.toCharArray(); int left = 0; int right = charArray.length-1; char leftChar,rightChar; while(left<right) { leftChar = charArray[left]; if(!isLetterOrDigit(leftChar)) { left++; continue; } rightChar = charArray[right]; if(!isLetterOrDigit(rightChar)) { right--; continue; } int substract = leftChar - rightChar; if (isDigit(leftChar) || isDigit(rightChar)) { if (substract != 0) { return false; } } if (substract != 0 && substract != 32 && substract != -32) { return false; } left++; right--; } return true; } public boolean isDigit(char c) { return c>='0' && c<='9'; } public boolean isLetterOrDigit(char c) { return isDigit(c) || (c>='a' && c<='z') || (c>='A' && c<='Z'); }