当前位置: 首页 > news >正文

LeetCode 刷题【97. 交错字符串】

97. 交错字符串

自己做

解:递归(超时)

class Solution {
public:bool matchStr(string &s1, int i, string &s2, int j, string &s3, int z){while(i < s1.size() && j < s2.size() && z < s3.size() && s1[i] != s2[j]){   //不相等的情况下if(s3[z] == s1[i] || s3[z] == s2[j]){if(s3[z] == s1[i])i++;if(s3[z] == s2[j])j++;z++;}else                                                              //不匹配return false;}if(i < s1.size() && j < s2.size() && z < s3.size() && s1[i] == s2[j] && s3[z] == s1[i]){                 //相等的情况下if(matchStr(s1, i + 1, s2, j, s3, z + 1))                         //匹配第一个return true;if(matchStr(s1, i, s2, j + 1, s3, z + 1))                         //匹配第二个return true;return false;                                                     //都匹配不上}while(i < s1.size())                                                  //第一个字符串没有匹配完if(s1[i] == s3[z]){i++;z++;}elsereturn false;while(j < s2.size())                                                  //第二个字符串没有匹配完if(s2[j] == s3[z]){j++;z++;}elsereturn false;if(i == s1.size() && j == s2.size() && z == s3.size())return true;return false;}bool isInterleave(string s1, string s2, string s3) {if(s1.size() + s2.size() > s3.size())return false;return matchStr(s1, 0, s2, 0, s3, 0);}
};

看题解

官方题解:

动态规划

class Solution {
public:bool isInterleave(string s1, string s2, string s3) {auto f = vector < vector <int> > (s1.size() + 1, vector <int> (s2.size() + 1, false));int n = s1.size(), m = s2.size(), t = s3.size();if (n + m != t) {return false;}f[0][0] = true;for (int i = 0; i <= n; ++i) {for (int j = 0; j <= m; ++j) {int p = i + j - 1;if (i > 0) {f[i][j] |= (f[i - 1][j] && s1[i - 1] == s3[p]);}if (j > 0) {f[i][j] |= (f[i][j - 1] && s2[j - 1] == s3[p]);}}}return f[n][m];}
};

优化自己的代码

class Solution {
public:bool isInterleave(string s1, string s2, string s3) {if(s1.size() + s2.size() != s3.size())              //必然不匹配return false;vector<vector<bool>> DP(s1.size() + 1, vector<bool>(s2.size() + 1, false));DP[0][0] = true;for(int i = 1; i <= s1.size(); i++)              //s2不选(为空)的情况if(s1[i - 1] == s3[i - 1])DP[i][0] = DP[i - 1][0];elsebreak;for(int j = 1; j <= s2.size(); j++)              //s1不选(为空)的情况if(s2[j - 1] == s3[j - 1])DP[0][j] = DP[0][j - 1];elsebreak; for(int i = 1; i <= s1.size(); i++)for(int j = 1; j <= s2.size(); j++){DP[i][j] =    DP[i][j - 1] && s2[j - 1] == s3[i + j - 1] || DP[i - 1][j] && s1[i - 1] == s3[i + j - 1];}return DP[s1.size()][s2.size()];}
};

官方最终优化版(省内存)

class Solution {
public:bool isInterleave(string s1, string s2, string s3) {auto f = vector <int> (s2.size() + 1, false);int n = s1.size(), m = s2.size(), t = s3.size();if (n + m != t) {return false;}f[0] = true;for (int i = 0; i <= n; ++i) {for (int j = 0; j <= m; ++j) {int p = i + j - 1;if (i > 0) {f[j] &= (s1[i - 1] == s3[p]);}if (j > 0) {f[j] |= (f[j - 1] && s2[j - 1] == s3[p]);}}}return f[m];}
};

http://www.dtcms.com/a/439107.html

相关文章:

  • 网站后台登录怎么做的做网站需要哪些方面的支出
  • 公司网站打开显示建设中产品设计网站制作
  • 文具网站建设策划书wordpress 搜索小工具
  • 制作一个网站要花多少钱自学电商还是去培训机构
  • 昆山推广用什么网站比较好如何创建一个免费网站
  • 计算机操作系统 网络入门(小白专版 · 深入浅出)
  • 站长工具seo综合查询外部链接数量商城开发网站
  • STM32电机控制基础知识
  • 算法题(225):樱花
  • 做互联网的网站app客户端网站建设方案
  • 网站描述 关键词上海 有哪些做网站的公司
  • 计算机网络技术电商网站建设与运营方向怎么投放广告
  • 低空经济新纪元:AI驱动的智能无人机技术与应用
  • 专业建站分销商城a wordpress
  • 创建一个顺序栈,并实现基础的“出栈入栈”功能(C++版)
  • 定制手机壳的网站广州冼村旧改最新消息
  • 怎么做淘宝客网站备案网站后台的形成
  • wordpress安装后查看站点失败河北平台网站建设
  • 网站专题页制作网站备案关闭影响排名
  • Python Flask框架深度解析:从入门到高级
  • 网站销售的优势生鲜做的好的网站
  • 中企动力做的网站怎么登陆运城市住房与城乡建设厅网站
  • 香橙派RK3588s部署大模型
  • 【自记】数据开发中分区表、事务表、分区事务表:特性相似处与区别
  • ATMS课程管理系统 - 从零构建的MySQL实战之旅
  • 广东东莞自己建站教程做网站设计的公司叫什么
  • 网站站外引流怎么做西安动力无限网站建设
  • 智能交通顶刊TITS论文分享|一种可以提高车辆轨迹预测精度和稳定性的稀疏时空Transformer模型
  • 福州专业网站设计团队seo排名优化公司
  • 进入WSL2 Ubuntu环境的完整指南