LintCode——交叉字符串

Posted 听风&说往事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode——交叉字符串相关的知识,希望对你有一定的参考价值。

描述:给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。

样例:s1 = "aabcc" s2 = "dbbca"

      - 当 s3 = "aadbbcbcac",返回  true.

      - 当 s3 = "aadbbbaccc", 返回 false.

Java

 1 public class Solution {
 2     /**
 3      * @param s1: A string
 4      * @param s2: A string
 5      * @param s3: A string
 6      * @return: Determine whether s3 is formed by interleaving of s1 and s2
 7      */
 8     public boolean isInterleave(String s1, String s2, String s3){
 9         // write your code here
10         int s1_len=s1.length();
11         int s2_len=s2.length();
12         int s3_len=s3.length();
13         if(s1_len == 0){
14             if(s2.equals(s3)) 
15                 return true;
16             else
17                 return false;
18         }
19         if(s2_len == 0){
20             if(s1.equals(s3)) 
21                 return true;
22             else 
23                 return false;
24         }
25         int visited[][] = new int[s1_len + 1][s2_len + 1];
26         visited[0][0]=1;
27         for(int i = 0;i < s1_len;i++){
28             if(s1.charAt(i) == s3.charAt(i))
29                 visited[i + 1][0] = 1;
30             else 
31                 break;
32         }
33         for(int j = 0;j < s2_len;j++){
34             if(s2.charAt(j) == s3.charAt(j))
35                 visited[0][j + 1] = 1;
36             else 
37                 break;
38         }
39         for(int i = 1;i < visited.length;i++){
40             for(int j = 1;j < visited[0].length;j++){
41                 int row = i - 1;
42                 int col = j - 1;
43                 if((visited[i][j - 1] == 1 && 
44                     s2.charAt(col) == s3.charAt(row + col + 1)) || 
45                    (visited[i - 1][j] == 1 && 
46                     s1.charAt(row) == s3.charAt(row + col  + 1)))
47                     visited[i][j]=1;
48             }
49         }
50         if(visited[visited.length - 1][visited[0].length - 1] == 1)
51             return true;
52         return false;
53     }
54 }

以上是关于LintCode——交叉字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何优化C ++代码的以下片段 - 卷中的零交叉

Lintcode29 Interleaving String solution 题解

LintCode刷题笔记-- InterLeaving

LintCode 7.Serialize and Deserialize Binary Tree(含测试代码)

LintCode题解之比较字符串

LintCode之最长单词