97 Interleaving String

1338 단어
s3이 s1과 s2가 교차하여 구성되었는지 판단, 동적 기획 구해,faster than 71%
dp[i - 1][j] == true && s1.charAt(i - 1) === s3.charAt(i + j - 1) dp[i][j - 1] == true && s2.charAt(j - 1) === s3.charAt(i + j - 1)
dp[i][j]=true는 s1의 전 i 문자와 s2의 전 j 문자가 s3의 i + j 문자로 교차할 수 있음을 나타낸다
즉, s1의 전 i-1 문자와 s2의 전 j 문자는 s3을 구성하는 i+j 문자를 교차시킬 수 있다. 만약에 s1의 제 i-1 문자가 s3의 전 i+j-1 문자와 같다면 이 다수 1은 빈 문자열을 고려한 상황이다.
/**
 * @param {string} s1
 * @param {string} s2
 * @param {string} s3
 * @return {boolean}
 */
var isInterleave = function(s1, s2, s3) {
    if(s1.length + s2.length !== s3.length) return false
    var dp = Array(s1.length + 1).fill().map(item => Array(s2.length + 1).fill(false))
    dp[0][0] = true
    for(var i = 1; i < s1.length + 1; i++){
        dp[i][0] = dp[i - 1][0] && (s1[i - 1] === s3[i - 1])
    }
    for(var j = 1; j < s2.length + 1; j++){
        dp[0][j] = dp[0][j - 1] && (s2[j - 1] === s3[j - 1])
    }
    for(var i = 1; i < s1.length + 1; i++){
        for(var j = 1; j < s2.length + 1; j++){
            if(dp[i - 1][j] == true && s1.charAt(i - 1) === s3.charAt(i + j - 1)) dp[i][j] = true
            if(dp[i][j - 1] == true && s2.charAt(j - 1) === s3.charAt(i + j - 1)) dp[i][j] = true
        }
    }
    return dp[s1.length][s2.length]
};

좋은 웹페이지 즐겨찾기