LeetCode 97: Interleaving String 字符串交错
2015-09-01 22:50
411 查看
博客转载请注明地址:http://blog.csdn.net/SunliyMonkey/article/details/48165711
给定三个字符串S1S_1,S2S_2,S3S_3,判断S3S_3是否能够由S1S_1,S2S_2交错组合而成。
样例:
S1=aabccS_1 = aabcc
S2=dbbcaS_2 = dbbca
当S3=aadbbcbcacS_3 = aadbbcbcac时,返回 true
当S3=aadbbbacccS_3 = aadbbbaccc时,返回 false
题目描述
题目地址:https://leetcode.com/problems/interleaving-string/给定三个字符串S1S_1,S2S_2,S3S_3,判断S3S_3是否能够由S1S_1,S2S_2交错组合而成。
样例:
S1=aabccS_1 = aabcc
S2=dbbcaS_2 = dbbca
当S3=aadbbcbcacS_3 = aadbbcbcac时,返回 true
当S3=aadbbbacccS_3 = aadbbbaccc时,返回 false
考察点
动态规划陷阱
无Code
[code]class Solution { public: bool isInterleave(string s1, string s2, string s3) { vector <int> match[2]; int cur, nxt; int l; int l1 = s1.length(); int l2 = s2.length(); int l3 = s3.length(); if(l1+l2 != l3) return false; int *vis[2]; vis[0] = new int[l1+1]; vis[1] = new int[l1+1]; for(int i = 0; i <= l1; i++) vis[0][i] = vis[1][i] = -1; nxt = 0; match[0].push_back(0); for(int i = 0; i < l3; i++){ cur = nxt; nxt = !nxt; match[nxt].clear(); for(int k = 0; k < match[cur].size(); k++){ l = match[cur][k]; if(l < l1 && s1[l] == s3[i]){ if(vis[nxt][l+1] != i){ match[nxt].push_back(l+1); vis[nxt][l+1] = i; } } if(i-l+1 <= l2 && s2[i-l] == s3[i]){ if(vis[nxt][l] != i){ match[nxt].push_back(l); vis[nxt][l] = i; } } } } return !match[nxt].empty(); } };
排名
相关文章推荐
- 现在
- 自学Android系列 笔记2 Android学习之Android fill_parent、wrap_content和match_parent的区别
- 自学Android系列 笔记2 Android网络通信两种方法
- Android编程中一个个小的问题
- 数据挖掘面试题
- 理解call及apply
- undefined reference to _imp__xmlFree
- 正则表达式 (Regular Expressions)
- Linux启动/停止/重启Mysql数据库的方法
- [机器学习实战] -Logistic回归
- 自学Android系列 笔记2 Android_RelativeLayout属性大全
- iOS文件的操作与相关的属性
- yum源的配置与使用
- 数据库基本操作-mysql
- Generate Parentheses
- 自学Android系列 笔记2 Android 学习之浅谈Android五大布局
- 自学Android系列 笔记2 Android 学习之toast
- maven项目管理之-07-依赖传递
- 【剑指offer】十二,二叉树的镜像
- 比较get 和post