zoukankan      html  css  js  c++  java
  • 判断一个字符串是否是由另2个字符串交错组成的

    现在有3个字符串s1,s2,s3,我们需要判断s3是否是由s1和s2交错组成的。对于三个字符串A,B,C。我们称C由A和B交错组成当且仅当C包含且仅包含A,B中所有字符,且对应的顺序不改变

    例如s1="abc",s="1234d",s3="ab1234dc",那么s3是由s1和s2交错组成的,如果s3="ab1234cd",则s3不是由s1和s2交错组成的。

      public  boolean isjiaocuo(String s1, String s2, String s3) {
                        boolean[][] table = new boolean[s1.length()+1][s2.length()+1];
                        for(int i=0; i<s1.length()+1; i++)
                            for(int j=0; j< s2.length()+1; j++){
                                if(i==0 && j==0)
                                    table[i][j] = true;
                                else if(i == 0)
                                    table[i][j] = ( table[i][j-1] && s2.charAt(j-1) == s3.charAt(i+j-1));
                                else if(j == 0)
                                    table[i][j] = ( table[i-1][j] && s1.charAt(i-1) == s3.charAt(i+j-1));
                                else
                                    table[i][j] = (table[i-1][j] && s1.charAt(i-1) == s3.charAt(i+j-1) ) || (table[i][j-1] && s2.charAt(j-1) == s3.charAt(i+j-1));
                            }
    
                        return table[s1.length()][s2.length()];
                        
                    }

    这段代码的解释如下:

    dp表代表当s1在i处是交错的同时s2在j处是交错的s3在i+j处是否是交错的。

    如果s1和s2在当前位置是空,s3也是空,则我们视为true;如果s1是空,s2之前的位置是交错的而且s2在当前位置和s3的当前位置字符是一样的,则视为true;反之s2为空时情况是一样的。

    现在考虑s1和s2都不为空的情况。当我们从i-1,j到达i,j处时,如果i-1,j处是交错的而i处与当前的s3一致,则视为true;

    当我们从i,j-1到达i,j处时,如果i,j-1处是交错的而j处与当前的s3一致,则视为true;

    参考https://leetcode.com/discuss/11694/my-dp-solution-in-c

  • 相关阅读:
    分享 35 套精美的 PSD 图标素材
    HTML 5 标签、属性、事件及浏览器兼容性速查表
    推荐21款最佳 HTML 5 网页游戏
    二分查找
    双指针合并两个排序数组
    关于explorer.exe文件或目录已损坏的问题
    一文弄懂数组的和
    云效DevOps实践如何基于云效实现测试自动化集成和分析
    五福背后的 Web 3D 引擎 Oasis Engine 正式开源
    Delta Lake在Soul的应用实践
  • 原文地址:https://www.cnblogs.com/jfwu/p/5633715.html
Copyright © 2011-2022 走看看