leetcode Day59 剑指专项94-96

72 阅读1分钟

剑指 Offer II 094. 最少回文分割

var minCut = function(s) {
   const helper=new Array(s.length).fill(0).map(()=>new Array(s.length).fill(true))
    for(let i=s.length-1;i>=0;i--){
        for(let j=i+1;j<s.length;j++){
            helper[i][j]=s[i]===s[j] && helper[i+1][j-1]
        }
    }
    const dp=new Array(s.length).fill(3000)
    for(let i=0;i<s.length;i++){
        if(helper[0][i]){
            dp[i]=0
        }else{
            for(let j=0;j<i;j++){
                if(helper[j+1][i]){
                    dp[i]=Math.min(dp[j]+1,dp[i])
                }
            }
        }
    }
    return dp[s.length-1]
};

剑指 Offer II 095. 最长公共子序列

var longestCommonSubsequence = function(text1, text2) {
    const dp=new Array(text1.length+1).fill(0).map(()=>new Array(text2.length+1).fill(0))
    for(let i=1;i<text1.length+1;i++){
        for(let j=1;j<text2.length+1;j++){
            if(text1[i-1]===text2[j-1]){
                dp[i][j]=dp[i-1][j-1]+1
            }else{
                dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1])
            }
        }
    }
    return dp[text1.length][text2.length]
};

剑指 Offer II 096. 字符串交织

var isInterleave = function(s1, s2, s3) {
    const m=s1.length
    const n=s2.length
    if((m+n)!==s3.length)return false
    const dp=new Array(m+1).fill(0).map(()=>new Array(n+1).fill(false))
    dp[0][0]=true
    for(let i=1;i<m+1;i++){
        if(s1[i-1]===s3[i-1])dp[i][0]=true
        else break
    }
    for(let j=1;j<n+1;j++){
        if(s2[j-1]===s3[j-1])dp[0][j]=true
        else break
    }
    for(let i=1;i<m+1;i++){
        for(let j=1;j<n+1;j++){
            dp[i][j]=(s1[i-1]===s3[i+j-1]&&dp[i-1][j]) || (s2[j-1]===s3[i+j-1]&&dp[i][j-1])
        }
    }
    return dp[m][n]
};