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
for(let j=i+1
helper[i][j]=s[i]===s[j] && helper[i+1][j-1]
}
}
const dp=new Array(s.length).fill(3000)
for(let i=0
if(helper[0][i]){
dp[i]=0
}else{
for(let j=0
if(helper[j+1][i]){
dp[i]=Math.min(dp[j]+1,dp[i])
}
}
}
}
return dp[s.length-1]
}
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
for(let j=1
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]
}
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
if(s1[i-1]===s3[i-1])dp[i][0]=true
else break
}
for(let j=1
if(s2[j-1]===s3[j-1])dp[0][j]=true
else break
}
for(let i=1
for(let j=1
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]
}