編程題:查找兩個字符串的最長公共子串的Javascript函數


這是多益網絡前端的一道筆試題,這里不得不吐槽一下它的筆試系統是真的垃圾,用習慣牛客網的做題系統,表示這次筆試做的非常難受。

下面分享我的做法

思路:傳入兩個字符串,先比較誰長誰短,遍歷短的字符串,兩個for循環,外層循環從最大長度開始遍歷,長度逐個遞減,內層循環從短字符串的最左邊開始截取最大長度的字符串,檢查截取的字符串是否在長的字符串里面,  直到找到匹配的字符串

代碼:

function findLongestCommonStr(s1, s2) {
    var commonStr = '', L1 = s1.length, L2 = s2.length;
    // 比較s1,s2的長度,看誰長誰短
    var shortStr = L1>L2 ? s2 : s1;
    var longStr = L1>L2 ? s1 : s2;
    // 短的字符串的長度
    var strLen = shortStr.length;

    // 遍歷短的字符串,從大到小遞減
    for (let j = strLen; j > 0; j--) {
        // 不同的長度有總共有i個可能,從做到右遍歷
        for (let i = 0; i <= strLen - j; i++) {
            // 截取出短字符串的部分字符串
            commonStr = shortStr.substr(i, j);
            // 為了便於觀測運行的過程,打印看一下會直觀很多
            console.log('commonStr:',commonStr,'i:',i,'j:',j);

            // 放在長字符串里看看有沒有匹配的,如果有直接返回
            if (longStr.indexOf(commonStr) >= 0) return commonStr
        }
    }
    // 沒有的話返回空字符串
    return ''
}

console.log(findLongestCommonStr("qwer--", "qtrrwqw-")); //qw

// 下面的打印的結果,函數執行的過程,i是從哪里開始截取,j是截取的長度
// commonStr: qwer-- i: 0 j: 6
// commonStr: qwer- i: 0 j: 5
// commonStr: wer-- i: 1 j: 5
// commonStr: qwer  i: 0 j: 4
// commonStr: wer-  i: 1 j: 4
// commonStr: er--  i: 2 j: 4
// commonStr: qwe   i: 0 j: 3
// commonStr: wer   i: 1 j: 3
// commonStr: er-   i: 2 j: 3
// commonStr: r--   i: 3 j: 3
// commonStr: qw    i: 0 j: 2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM