interleaving String

題意:給定三個序列S1,S2,S3,對於S1,S2和S3比較,看S1、S2是否是和S3間隔排序的,譬如,S1 = “aabcc”,S2=”dbbca”,S3=”aadbbcbcac”,則是滿足條件的。
思路:動規。維護數組dp[s1.length][s2.length]。先初始化dp數組,再進行判斷。
代碼:

package com.interLeaving;

public class InterLeaving {
    public boolean isInterLeaving(String s1 ,String s2 , String s3) {
        if(s1.length() + s2.length() != s3.length())  return false;
        boolean[][] dp = new boolean[s1.length()+1][s2.length()+1];
        for (int i = 1; i <= s1.length() && s1.charAt(i-1) == s3.charAt(i-1); i++)
            dp[i][0] = true;
        for (int j = 1; j <= s2.length() && s2.charAt(j-1) == s3.charAt(j-1); j++) 
            dp[0][j] = true;

        for(int i = 1 ; i <= s1.length() ; i++){
            for(int j =  1 ; j <= s2.length() ; j++){
                char c = s3.charAt(i+j-1);
                if(c == s1.charAt(i-1) && dp[i-1][j])
                    dp[i][j] = true;
                if(c == s2.charAt(j-1) && dp[i][j-1])
                    dp[i][j] = true;
            }
        }
        return dp[s1.length()][s2.length()];
    }

    public static void main(String[] args) {
        String s1 = "aabcc";
        String s2 = "dbbca";
        String s3 = "aadbbcbcac";
        System.out.println(new InterLeaving().isInterLeaving(s1, s2, s3));

    }

}
發佈了116 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章