【JS】 驗證迴文串 #字串 #雙指標 Easy
阿新 • • 發佈:2018-11-30
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
輸入: “A man, a plan, a canal: Panama” ,輸出: true
輸入: “race a car” , 輸出: false
解法一:
將字串轉成大寫,刪除字串中數字和字母之外的符號,一個新變數 turn 接收翻轉後的字串, 判斷 s , turn 是否相等。
複雜度O(n),可能是函式用太多了速度看起來慢
var isPalindrome = function(s) { s = s.toUpperCase().split(""); for(let i=0;i<s.length;i++) { if( (s[i]<='Z' && s[i]>='A') || (s[i]>='0' && s[i] <='9') ){ }else{ s.splice(i,1); i--; } } s=s.join("") var turn=s.split("").reverse().join("") return s==turn ? true : false; }
執行用時:2012 ms
已經戰勝 3.75 % 的 javascript 提交記錄
解法二:
建立map,並且使用雙指標
var isPalindrome = function(s) { var arr={"a":1,"b":1,"c":1,"d":1,"e":1,"f":1,"g":1,"h":1,"i":1,"j":1,"k":1,"l":1,"m":1, "n":1,"o":1,"p":1,"q":1,"r":1,"s":1,"t":1,"u":1,"v":1,"w":1,"x":1,"y":1,"z":1, "1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"0":1}; s = s.toLowerCase(); var len=s.length-1 for(let i=0,j=len;i<j;) { if( arr[s[i]]==1 && arr[s[j]]==1){ if(s[i]!=s[j]) return false; i++;j-- }else { if(arr[s[i]] !=1) i++ if(arr[s[j]] !=1) j-- } //console.log(s[i],s[j],i,j) } return true; };
執行用時:88 ms
已經戰勝 91.28 % 的 javascript 提交記錄