【算法】字符串和數(shù)組操作01

1、無(wú)重復(fù)字符的最長(zhǎng)子串

給定一個(gè)字符串,請(qǐng)你找出其中不含有重復(fù)字符的 **最長(zhǎng)子串 **的長(zhǎng)度。

示例:

輸入: s = "abcabcbb"
輸出: 3 
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "abc",所以其長(zhǎng)度為 3。
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let arr = [], max = 0;
    for( let i = 0; i < s.length; i++ ) {
        let index = arr.indexOf(s[i]);
        if( index !== -1 ) {
            arr.splice( 0, index+1 );
        }
        arr.push( s.charAt(i) );
        max = Math.max(arr.length, max);
    }

    return max;
};

2、最長(zhǎng)回文子串

給你一個(gè)字符串 s,找到 s 中最長(zhǎng)的回文子串。

思路:對(duì)于一個(gè)回文子串,例如cbabc,去掉首尾的c,它依舊是一個(gè)回文子串。因此我們可以通過(guò)P(i,j)表示從下標(biāo)i到j(luò)是否是回文字符串,狀態(tài)轉(zhuǎn)移方程:P(i,j) = P(i+1,j-1)^(s[i]===s[j])。

示例:

輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    let n = s.length;
    let res = '';
    let dp = Array.from( new Array(n),() => new Array(n).fill(0) );
    for( let i = n-1; i >= 0; i-- ) {
        for( let j = i; j < n; j++ ) {
            dp[i][j] = s[i] == s[j] && (j - i < 2 || dp[i+1][j-1]);
            if(dp[i][j] && j - i +1 > res.length){
                res = s.substring(i, j+1);
            }
        }
    }
    return res;
};

3、兩數(shù)之和

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。

思路:通過(guò)哈希表,將出現(xiàn)的元素以(key:數(shù)組,value:下標(biāo)),當(dāng)我們遍歷每一個(gè)元素時(shí),只需要判斷target - nums[i]是否在哈希表存在值就可以。

示例:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因?yàn)?nums[0] + nums[1] == 9 ,返回 [0, 1] 。
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var map = new Map();
    for(var i=0;i<nums.length;i++) {
        // 判斷哈希表中是否存在相應(yīng)target - nums[i]值。
        if(map.has(target - nums[i]) && map.get(target - nums[i]) !== i) {
            return [map.get(target - nums[i]), i];
        }
        map.set(nums[i], i);
    }
    return []
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容