leetcode125. Valid Palindrome

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.javascript

For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.java

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.ide

For the purpose of this problem, we define empty string as valid palindrome.this

驗證迴文字符串是比較常見的問題,所謂迴文,就是一個正讀和反讀都同樣的字符串,好比「level」或者「noon」等等就是迴文串。可是這裏,加入了空格和非字母數字的字符,增長了些難度,但其實原理仍是很簡單:只須要創建兩個指針,left和right, 分別從字符的開頭和結尾處開始遍歷整個字符串,若是遇到非字母數字的字符就跳過,繼續往下找,直到找到下一個字母數字或者結束遍歷,若是遇到大寫字母,就將其轉爲小寫。等左右指針都找到字母數字時,比較這兩個字符,若相等,則繼續比較下面兩個分別找到的字母數字,若不相等,直接返回false.指針

時間複雜度爲O(n), 代碼以下:code

var isPalindrome = function(s) {
       var n = s.length;
       if( n <= 1){
           return true
       }
       var left = 0;
       var right = n -1;
       while(left < right){
           if(!isAlphanumeric(s[left])){
               left++
           }else if(!isAlphanumeric(s[right])){
               right--
           }else if(s[left].toLowerCase() !== s[right].toLowerCase()){
               return false
           }else{
               left++
               right--
           }               
       }
       return true    
};
function isAlphanumeric(a){
   var c = a.charCodeAt(0)
   if( c >= 48 &&  c<=57){//0-9
       return true
   }
   if( c >= 65 &&  c<= 90){//A-Z
       return true
   }
   if( c >= 97 &&  c<= 122){//a-z
       return true
   }
   return false
}
相關文章
相關標籤/搜索