• 获取两个字符串全部公共的子串算法


    应用场景: 获取两个字符串全部公共的子串。

    思路: 1. 先获取两个子串的交集

                 2. 遍历交集子串,从最短子串到最长子串


    public static List<String> getAllCommonSubStrings(String str1, String str2) {
            //TODO null check.
            
            String longString = str1;
            String shortString = str2;
            if(str1.length() < str2.length()){
                longString = str2;
                shortString = str1;
            }
            
            List<String> result = new ArrayList<String>();
            List<String> vacancy = new ArrayList<String>();
            vacancy.add("");
            
            List<String> list1 = Arrays.asList(shortString.split(""));
            List<String> list2 = Arrays.asList(longString.split(""));
            
            result.addAll(list1);
            result.retainAll(list2);
            result.removeAll(vacancy);
            
            List<String> commonSubStrings = new ArrayList<String>();
            StringBuffer strBuf = new StringBuffer();
            
            for(int i = 0; i < result.size()-1; i++){
                strBuf = strBuf.append(result.get(i));
                if(shortString.contains(strBuf + result.get(i+1)) 
                        && longString.contains(strBuf + result.get(i+1))
                        && i < result.size()-2){
                    continue;
                }else{
                   commonSubStrings.add(strBuf.toString());
                   strBuf = new StringBuffer();
                }
            }
            String tail = commonSubStrings.get(commonSubStrings.size()-1)+ result.get(result.size()-1);
            if(shortString.contains(tail)
                    && longString.contains(tail)){
                commonSubStrings.set(commonSubStrings.size()-1, tail);
            }else{
                commonSubStrings.add(result.get(result.size()-1));
            }
            
            return commonSubStrings;
        }


  • 相关阅读:
    条件极值(1):隐函数极值问题
    从隐函数存在定理到隐函数定理
    吐槽教科书:不先行解释表达偏导数的符号
    8237dma的四种传送方式简介
    多线程中wait和notify的理解与使用
    ★三个和尚与机构臃肿的故事
    ★三个和尚与机构臃肿的故事
    常用的组播保留地址列表
    常用的组播保留地址列表
    谈谈IT界8大恐怖预言!
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5230171.html
Copyright © 2020-2023  润新知