LeetCode——Interleaving String

来源:互联网 发布:淘宝的大拿韩代敢买吗 编辑:程序博客网 时间:2024/06/05 06:52

Interleaving String


For example,
Given:
s1 = "aabcc",
s2 = "dbbca",

When s3 = "aadbbcbcac", return true.
When s3 = "aadbbbaccc", return false.

 

Java代码:

public class Solution {    public boolean isInterleave(String s1, String s2, String s3) {          int s1_len = s1.length(); int s2_len = s2.length(); int s3_len = s3.length(); if((s1_len+s2_len)!= s3_len) return false; if(s1 == null || s2 == null || s3==null)return false; if(s3.equals("")) return true; if(s1.equals("") && s2.equals(""))return false;  if(!(s1.equals("")) && !(s2.equals(""))){ if(s3.charAt(0) == s1.charAt(0) || s3.charAt(0)==s2.charAt(0)){ if(s3.charAt(0) == s1.charAt(0) && s3.charAt(0)==s2.charAt(0)){ if(!isInterleave(s1.substring(1), s2, s3.substring(1))) if(!isInterleave(s1, s2.substring(1), s3.substring(1)))return false; } else if(s3.charAt(0) == s1.charAt(0)){ if(!isInterleave(s1.substring(1), s2, s3.substring(1))) return false; } else{ if(!isInterleave(s1, s2.substring(1), s3.substring(1)))return false; } } else{ return false; } } else if(!s1.equals("")){ if(s3.charAt(0) == s1.charAt(0)) { if(!isInterleave(s1.substring(1), s2, s3.substring(1))) return false; }else{ return false; }  } else{ if(s3.charAt(0) == s2.charAt(0)) { if(!isInterleave(s1, s2.substring(1), s3.substring(1))) return false; }else{ return false; } } return true;    }}


代码提交之后,测试库里面有一组很长的字符串数组,结果“Time Limit Exceeded

原题的要求应该是使用时间复杂度更低的算法实现。

用动态规划的java实现:
public class Solution {    public boolean isInterleave(String s1, String s2, String s3) {        String min_string = s1.length()>s2.length()?s2:s1;String max_string = s1.length()>s2.length()?s1:s2;boolean [][] val = new boolean [min_string.length()+1][max_string.length()+1];if((s1.length()+s2.length())!=s3.length())return false;for(int i=0;i<=min_string.length();i++)for(int j=0;j<=max_string.length();j++)val[i][j] =false;val[0][0] = true;for(int i =1;i<=min_string.length();i++)if(s3.charAt(i-1) == min_string.charAt(i-1))val[i][0] =true;elsebreak;for(int j=1;j<=max_string.length();j++)for(int i=0;i<=min_string.length();i++)if(i ==0){if(val[i][j-1]==true && s3.charAt(i+j-1)==max_string.charAt(j-1))val[i][j] =true;}else{if((val[i-1][j]==true && s3.charAt(j+i-1)==min_string.charAt(i-1)) ||(val[i][j-1]==true && s3.charAt(i+j-1)==max_string.charAt(j-1)))val[i][j] =true;}if(val[min_string.length()][max_string.length()]==true)return true;else return false;    }}

做了一下运行时间的对比
代码一:13261ms 代码二:2ms



0 0
原创粉丝点击