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/
Copyright secured by Digiprove © 2018
Vance
0
Tags :