国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 判斷回文字符串

zhkai / 838人閱讀

摘要:問題描述判斷給定的字符串,如果字符串是一個,那么返回,反之返回。第一次不同可允許第一次發現不同時,讓右邊或左邊判斷相不相等這時候若相等可繼續否則直接返回結果判斷字符回文

回文( Palindromes ),在中文文當中是指倒著念和順著念都是相同的,前后對稱,例如“上海自來水來自海上”;在英文文當中是指正著看和反著看都相同的單詞,例如“madam”;而對于數字,又稱之為回文數,是指一個像“16461”這樣的對稱的數,即這個數的數字按相反的順序重新排列后得到的數和原來的數一樣。

問題描述

判斷給定的字符串,如果字符串是一個Palindromes,那么返回true,反之返回false。

實現方法 1. reverse()
function Palindromes(str) {
    let reg = /[W_]/g; // w 匹配所有字母和數字以及下劃線; W與之相反; [W_] 表示匹配下劃線或者所有非字母非數字中的任意一個;/g全局匹配
    let newStr = str.replace(reg, "").toLowerCase();
    let reverseStr = newStr.split("").reverse().join("")
    return reverseStr === newStr; // 與 newStr 對比
}

實際上這里做了很多步對數組的操作,字符轉數組 翻轉數組 再轉字符串,所以這里性能也不是很好。以為數組是引用類型,要改變這個數組,需要開辟新的堆地址空間。

2. for 循環
function Palindromes(str) {
    let reg = /[W_]/g;
    let newStr = str.replace(reg, "").toLowerCase();
    for(let i = 0, len = Math.floor(newStr.length / 2); i < len; i++) {
        if(newStr[i] !== newStr[newStr.length - 1 - i]) return false;
    }
    return true;
}

寫法二

function Palindromes(str) {
    let reg = /[W_]/g;
    let newStr = str.replace(reg, "").toLowerCase();
    let len = newStr.length;
    for(let i = 0, j = len - 1; i < j; i++, j--) { // i < j
        console.log("---");
        if(newStr[i] !== newStr[j]) return false;
    }
    return true;
}
3. 遞歸
function palin(str) {
    let reg = /[W_]/g;
    let newStr = str.replace(reg, "").toLowerCase();
    let len = newStr.length;
    while(len >= 1) {
        console.log("--")
        if(newStr[0] != newStr[len - 1]) {
            // len = 0; // 為了終止 while 循環 否則會陷入死循環
            return false;
        } else {
            return palin(newStr.slice(1, len - 1)); 
        // 截掉收尾字符 再次比較收尾字符是否相等 
        // 直到字符串剩下一個字符(奇數項)或者 0 個字符(偶數項)
        }
    }
    return true;
}
給題目再增加個要求

對于給定的字符串,最多可以刪除一個字符,判斷它是否還是不是回文。

設置一個變量 flag,當第一次發現兩邊這一對字符不同時,可繼續進行對比; 之后的對比中若發現不同,立即返回結果。

function palin(str) {
    let flag = false; // 第一次不同可允許
    let len = str.length;
    for(let [i, j] = [0, len - 1]; i < j; i++, j--) {
        if(str[i] !== str[j]) {
            if(flag) {
                return false;
            }
            // 第一次發現不同時,讓右邊-1 或左邊+1判斷相不相等 
            // 這時候若相等可繼續 否則直接返回結果 false
            if(str[i++] == str[j]) {
                i++;
                flag = true;
            } else if (str[i] == str[j--]) {
                j--;
                flag = true;
            } else {
                return false;
            }
        }
    }
    return true;
}

palin("abaacaaa");
palin("aabsdjdbaa");
palin("ab")
references

判斷字符回文

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97235.html

相關文章

  • LeetCode - 009 - 回文數(palindrome-number)

    摘要:最后,我們判斷一開始的兩種情況,并返回或者即可。本許可協議授權之外的使用權限可以從處獲得。 Create by jsliang on 2019-05-22 19:30:42 Recently revised in 2019-05-23 11:42:52 一 目錄 不折騰的前端,和咸魚有什么區別 目錄 一 目錄 二 前言 三 解題 ?3.1 解題 - 數組操作 ...

    hikui 評論0 收藏0
  • JS算法題之leetcode(1~10)

    摘要:先去空白,去掉空白之后取第一個字符,判斷正負符號,若是英文直接返回,若數字則不取?;匚臄殿}目描述判斷一個整數是否是回文數?;匚臄凳侵刚驈淖笙蛴液偷剐驈挠蚁蜃笞x都是一樣的整數。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發的知識儲備在數據結構以及算法層面是有所暫缺的,可能歸根于我們的前端開發的業務性質,但是我認為任何的編程崗位都離不開數據結構以及算法。因此,我作為...

    SoapEye 評論0 收藏0
  • 不使用任何額外變量判斷回文數字

    摘要:不使用任何額外變量判斷回文數字思路不能使用額外的變量,只能用參數完成,由于不能使用額外變量的限制,所以代碼可讀性有點差將轉成,利用求出整數的位數,然后用字符串的切片來取得前后對稱部分,如為則為,的下標為利用切片可以快速字符串則為可以通過 不使用任何額外變量判斷回文數字 Palindrome Number Determine whether an integer is a palind...

    ad6623 評論0 收藏0
  • [Leetcode] Palindrome Permutation 回文變換

    摘要:最笨的方法就是用的解法,找出所有的,然后再用中判斷回文的方法來判斷結果中是否有回文。而中心對稱點如果是字符,該字符會是奇數次,如果在兩個字符之間,則所有字符都是出現偶數次。 Palindrome Permutation Given a string, determine if a permutation of the string could form a palindrome. F...

    svtter 評論0 收藏0
  • 獲取最長回文子串

    摘要:以下是最長回文子串的相關代碼,相關邏輯已在注釋中注明我們原有的字符串可能存在兩種回文子串,一種是具有基數個元素例如一種是具有偶數個元素例如這樣的話分情況判斷比較復雜所以我們對原字符串進行擴充在相鄰元素中插入特殊值插入后的原基數回文子串變成了 以下是最長回文子串的Manacher‘s Algorithm相關代碼,相關邏輯已在注釋中注明: public static String solu...

    ymyang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<