DP
The previous fault is due to eh second sentence in for loop, changing it form i<s.size() to i<=s.size() and it fixed.
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (s1.size() + s2.size() != s3.size()) {
return false;
}
vector<vector<bool> > way(s1.size()+1, vector<bool>(s2.size()+1,false));
way[0][0]=true;
int i,j;
for (i=1; i<=s1.size(); i++) {
if (s1[i-1]==s3[i-1]) {
way[i][0]=true;
}else {
break;
}
}
for (i=1; i<=s2.size(); i++) {
if (s2[i-1]==s3[i-1]) {
way[0][i]=true;
}else {
break;
}
}
for (i=1; i<=s1.size(); i++) {
for (j=1; j<=s2.size(); j++) {
if (s1[i-1]==s3[i+j-1]) {
way[i][j]=way[i-1][j]||way[i][j];
}
if (s2[j-1]==s3[i+j-1]) {
way[i][j]=way[i][j-1]||way[i][j];
}
}
}
return way[s1.size()][s2.size()];
}
};