Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40255
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-12-23 11:21:22

DP。二维数组isIntr[i][j]表示s3前i+j个字符是否是s1前i个字符与s2前j个字符的interleaving。那么有如下关系式
isIntr[i][j]=((isIntr[i-1][j]&&s1[i-1]==s3[i+j-1])||(isIntr[i][j-1]&&s2[j-1]==s3[i+j-1]));
最后isIntr[s1.length()][s2.length()]即为结果。



点击(此处)折叠或打开

  1. class Solution {
  2. public:
  3.     bool isInterleave(string s1, string s2, string s3) {
  4.         if(s1.length()+s2.length()!=s3.length()) return false;
  5.         vector<vector<bool>> isIntr(s1.length()+1,vector<bool>(s2.length()+1,false));
  6.         isIntr[0][0]=true;
  7.         for(int i=1;i<=s1.length();i++)
  8.             isIntr[i][0]=isIntr[i-1][0]&&s1[i-1]==s3[i-1];
  9.         for(int i=1;i<=s2.length();i++)
  10.             isIntr[0][i]=isIntr[0][i-1]&&s2[i-1]==s3[i-1];
  11.         for(int i=1;i<=s1.length();i++)
  12.             for(int j=1;j<=s2.length();j++)
  13.                 isIntr[i][j]=(isIntr[i-1][j]&&s1[i-1]==s3[i+j-1])||(isIntr[i][j-1]&&s2[j-1]==s3[i+j-1]);
  14.         return isIntr[s1.length()][s2.length()];
  15.     }
  16. };


阅读(134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~