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

  • 相关阅读:
    Shell编程笔记
    Git学习笔记
    JavaScript+jQuery实现简单的动态菜单
    JSON表单提交(ajax异步刷新)
    Json简单实例
    jsp分页
    浅谈this关键字
    Servlet+Javabean+Html实现简单的查询.删除.修改.添加四个功能
    Tomcat的安装与在myeclips中的配置
    jsp页面实现增删修改和查询
  • 原文地址:https://www.cnblogs.com/jfwu/p/5633715.html
Copyright © 2011-2022 走看看