leetcode 87
题意:
题解:
这道题可以通过dp求解,我们定义dp[i][j][k]为s1中下标i开始,s2中下标j开始,且长度为k的两个子字符串是否为扰乱字符串
然后我们可以发现dp[i][j][k]的求解可以分为两种情况,一种是这两个子字符串分别被分割为两个字符串,且被分割的两个子字符串不进行替换就和另外一个相等
另一种是需要经过替换才会相等。
class Solution { public: bool isScramble(string s1, string s2) { int l1=s1.size(); int l2=s2.size(); if(l1==0&&l2==0) return true; if(l1!=l2) return false; vector<vector<vector<int>>> dp(l1,vector<vector<int>>(l2,vector<int>(l1+1,0))); for(int k=1;k<=l1;k++) { for(int i=0;i+k-1<l1;i++) { for(int j=0;j+k-1<l2;j++) { if(k==1) { if(s1[i]==s2[j]) dp[i][j][k]=1; else dp[i][j][k]=0; } else { for(int n=1;n<k;n++) { if((dp[i][j+k-n][n]&&dp[i+n][j][k-n])|| (dp[i][j][n]&&dp[i+n][j+n][k-n])) { dp[i][j][k]=1; break; } } } } } } if(dp[0][0][l1]) return true; else return false; } };
posted on 2020-03-11 21:17 QingFengDaHui 阅读(102) 评论(0) 编辑 收藏 举报