标签:string int s1 力扣 ++ length 字符串 87 dp
题目
题解
这题真的是 大脑过载了 看完其他人的题解 我只能说666 所以这里不写了 我怕我写了也写不明白
放个链接给大家伙
代码
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 //代码来源 https://leetcode.cn/u/kingwx001/ kingwx001 大佬膜拜 6 class Solution { 7 public: 8 bool isScramble(string s1, string s2) { 9 int n = s1.length(); 10 vector<vector<vector<bool>>> dp(n, vector<vector<bool>>(n, vector<bool>(n))); 11 for (int j = 0; j < n; j++) { 12 //第一次循环预处理,找长度为1的扰乱字符串 13 for (int k = 0; k < n; k++) { 14 if (s1[j] == s2[k]) { 15 dp[j][j][k] = true; 16 } 17 } 18 } 19 for (int i = n - 1; i >= 0; i--) { 20 //第二次循环倒过来找所有的扰乱字符串 21 for (int j = i; j < n; j++) { 22 int length = j - i + 1; 23 for (int k = 0; k < n - length + 1; k++) { 24 for (int l = 0; l < length - 1; l++) { 25 if (dp[i][i + l][k] && dp[i + l + 1][j][k + l + 1] || 26 dp[i][i + l][k + length - l - 1] && dp[i + l + 1][j][k]) { 27 //两种可能,一种是[i,j]中间存在l使[i,l],[l + 1,j]分别是[k,k + l],[k + l + 1,k + length - 1]的扰乱字符串。另一种反过来就行了 28 dp[i][j][k] = true; 29 break; 30 } 31 } 32 } 33 } 34 } 35 return dp[0][n - 1][0]; 36 } 37 }; 38 39 int main() { 40 Solution sol; 41 string s1 = "great"; 42 string s2 = "rgeat"; 43 bool result=sol.isScramble(s1,s2); 44 cout << result << endl; 45 }View Code
标签:string,int,s1,力扣,++,length,字符串,87,dp 来源: https://www.cnblogs.com/zx469321142/p/16463446.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。