博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣算法题—097交错字符串
阅读量:6967 次
发布时间:2019-06-27

本文共 3013 字,大约阅读时间需要 10 分钟。

给定三个字符串 s1s2s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true

示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false
1 //使用动态规划 2 //  Ø d b b c a 3 //Ø T F F F F F 4 //a T F F F F F 5 //a T T T T T F 6 //b F T T F T F 7 //c F F T T T T 8 //c F F F T F T 9 10 class Solution {11 public:12     bool isInterleave(string s1, string s2, string s3) {13         if (s1.size() + s2.size() != s3.size()) return false;14         int n1 = s1.size(), n2 = s2.size();15         vector
> dp(n1 + 1, vector
(n2 + 1, false));16 for (int i = 0; i <= n1; ++i) {17 for (int j = 0; j <= n2; ++j) {18 if (i == 0 && j == 0) {19 dp[i][j] = true;20 }21 else if (i == 0) {22 dp[i][j] = dp[i][j - 1] && s2[j - 1] == s3[i + j - 1];23 }24 else if (j == 0) {25 dp[i][j] = dp[i - 1][j] && s1[i - 1] == s3[i + j - 1];26 }27 else {28 dp[i][j] = (dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]) || (dp[i][j - 1] && s2[j - 1] == s3[i + j - 1]);29 }30 }31 }32 return dp[n1][n2];33 }34 };35 36 //使用带优化的DFS来做37 class Solution {38 public:39 bool isInterleave(string s1, string s2, string s3) {40 if (s1.size() + s2.size() != s3.size()) return false;41 unordered_set
s;42 return helper(s1, 0, s2, 0, s3, 0, s);43 }44 bool helper(string& s1, int i, string& s2, int j, string& s3, int k, unordered_set
& s) {45 int key = i * s3.size() + j;46 if (s.count(key)) return false;47 if (i == s1.size()) return s2.substr(j) == s3.substr(k);48 if (j == s2.size()) return s1.substr(i) == s3.substr(k);49 if ((s1[i] == s3[k] && helper(s1, i + 1, s2, j, s3, k + 1, s)) ||50 (s2[j] == s3[k] && helper(s1, i, s2, j + 1, s3, k + 1, s))) return true;51 s.insert(key);52 return false;53 }54 };55 56 //使用BFS57 class Solution {58 public:59 bool isInterleave(string s1, string s2, string s3) {60 if (s1.size() + s2.size() != s3.size()) return false;61 int n1 = s1.size(), n2 = s2.size(), n3 = s3.size(), k = 0;62 unordered_set
s;63 queue
q{ { 0} };64 while (!q.empty() && k < n3) {65 int len = q.size();66 for (int t = 0; t < len; ++t) {67 int i = q.front() / n3, j = q.front() % n3; q.pop();68 if (i < n1 && s1[i] == s3[k]) {69 int key = (i + 1) * n3 + j;70 if (!s.count(key)) {71 s.insert(key);72 q.push(key);73 }74 }75 if (j < n2 && s2[j] == s3[k]) {76 int key = i * n3 + j + 1;77 if (!s.count(key)) {78 s.insert(key);79 q.push(key);80 }81 }82 }83 ++k;84 }85 return !q.empty() && k == n3;86 }87 };

 

转载于:https://www.cnblogs.com/zzw1024/p/10932776.html

你可能感兴趣的文章
菜鸟学Linux 第066篇笔记 简单配置iptables
查看>>
screen
查看>>
支持免费的办公软件 IBM Symphony
查看>>
SQL Server 中函数的理解总结
查看>>
mysql5.1.X安装plugin
查看>>
Nginx+tomcat整合
查看>>
解决Vsphere Client 60天过期问题
查看>>
RDP error: This computer can’t connect to the remote computer
查看>>
Zabbix3.x安装图解教程
查看>>
linux rz sz 上传下载命令详解
查看>>
Know more about AWR Parse Statistics
查看>>
SElinux 配置与管理
查看>>
Script to Collect RAC Diagnostic Information (racdiag.sql)
查看>>
Linux对外连接端口数限制
查看>>
增加删除列列
查看>>
docker的资源隔离---cpu、内存、磁盘限制
查看>>
PMP考生最关心的八大问题
查看>>
SpringBoot启动分析
查看>>
python click模块-命令行神器
查看>>
Zabbix从入门到应用(一)
查看>>