【LeetCode】 125 驗證迴文串
阿新 • • 發佈:2018-11-29
解題思路:
1 哦 看吶,這是我們的老朋友雙指標,3Sum這道題也是用這個來做的。設定兩個指標從前後分別向中間遍歷,驗證遇到的對應位置的字元是不是相等。
2 需要注意:統一大小寫的時候別用Character的API toUpperCase,耗時較多,直接x-=32即可;同時注意不可以x = x - 32,會報型別轉換錯誤;
程式碼:
class Solution { public boolean isPalindrome(String s) { s = s.trim(); char[] c = s.toCharArray(); int left; int right; for (left = 0, right = s.length() - 1;left <= right;){ //非字母數字則不處理 //left找字母或者數字 while (left < s.length() && !isValidChar(c[left])) left++; //right找字母或數字 while (right >= 0 && !isValidChar(c[right])) right--; if (left == s.length() && right == -1) return true; //大小寫統一 if(c[left]>='a'){ c[left]-=32; } if(c[right]>='a'){ c[right]-=32; } //判斷是否相同 if (c[left] != c[right]) return false; else { left++; right--; } } return true; } private boolean isValidChar(char c){ return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'); } }