Leetcode #125 驗證回文串
題目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
解法:
一開始想著用黑名單過濾,但發現題目的測試範例會有一堆奇妙的符號出現,過濾很久還是有新的符號,最後改為白名單方式,用ascii code檢查是否為英文字母跟數字,接著把這個值轉成字串存到一個陣列,並複製給另一個陣列進行逆轉,最後比對兩個字串
/** * @param {string} s * @return {boolean} */ var isPalindrome = function(s) { var s = s.toLowerCase(); var arr = []; var arr2 = []; for (let i = 0; i < s.length; i++) { let ascii_code = s.charCodeAt(i); if ((ascii_code >= 48) && (ascii_code <= 57) || (ascii_code >= 97) && (ascii_code <= 122)) { arr.push(s[i]); } } arr2 = arr2.concat(arr); //深拷貝給arr2 arr2 = arr2.reverse(); for (let i = 0; i < arr.length; i++) { if (arr[i] !== arr2[i]) { return false; } } return true; };
題目連結:https://leetcode-cn.com/problems/valid-palindrome/description/
關於深拷貝:http://larry850806.github.io/2016/09/20/shallow-vs-deep-copy/

Vance
0
Tags :