1. 程式人生 > >LintCode——交叉字符串

LintCode——交叉字符串

and render [] ntc lint string erl ole bre

描述:給出三個字符串: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——交叉字符串