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/

Digiprove sealCopyright secured by Digiprove © 2018
Tags :

發表迴響