题目:
给定一个字符串,要求判断是否由另外两个给定字符串的交替组成
分析:
//两个字符串交替组成另一个字符串问题,给定一个字符串3,判断是否由字符串1,2交替组成
//样本对应模型,str1,str2两个样本对应str3,
假设字符串如下
str1:=“aaabsk” str2:=“aacfk” str3:=“aaacaabfskk”
新建一个[][]bool 多维矩阵 横向是str2,纵向是str1
将str1 str2 str3分别对应到矩阵的位置上,str3[i+j]上的字符,必然来自str1[i]或者str2的[j]
str3的i+j位置只要是str1或者str2中的一个字符,,并且行方向上前一个,即j-1为rue,列方向上,上方的值即j-1的值为true,将dp对应位置赋值为true
下面看代码:
//字符串交替组成另一个字符串问题,给定一个字符串3,判断是否由字符串1,2交替组成
//
//str1:="aaabsk" str2:="aacfk" str3:="aaacaabfskk"
func mixstr(str1 string,str2 string ,str3 string) bool{
if len(str3) != len(str1)+len(str2){
return false
}
var dp [][]bool
for i :=0;i<len(str1)+1;i++{
tmp:=make([]bool,len(str2)+1)
dp=append(dp,tmp)
}
dp[0][0]=true
fmt.Println(dp)
for i:=0;i<len(str2)+1;i++{
if str2[i]==str3[i]{
dp[0][i+1]=true
}else{
break
}
}
for i:=0;i<len(str1)+1;i++{
if str1[i]==str3[i]{
dp[i+1][0]=true
}else{
break
}
}
for i:=1;i<=len(str1);i++{
for j:=1;j<=len(str2);j++{
if (str3[i+j-1]==str2[j-1] && dp[i][j-1]) || (str3[i+j-1]==str1[i-1] && dp[i-1][j]){
dp[i][j]=true
}
}
}
fmt.Println(dp)
return true
}