zoukankan      html  css  js  c++  java
  • 获取两个字符串全部公共的子串算法

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

    思路: 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;
        }


  • 相关阅读:
    【图文并茂,点赞收藏哦!】重学巩固你的Vuejs知识体系
    RabbitMQ概念及控制台介绍
    RabbitMQ入门介绍及环境搭建
    C# 利用PdfSharp生成Pdf文件
    利用pdf.js在线展示PDF文档
    Python办公自动化之Excel转Word
    C#利用ServiceStack.Redis访问Redis
    Redis基础之事务
    Redis基础之配置文件
    第0天 | 12天搞定Pyhon,前言
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5230171.html
Copyright © 2011-2022 走看看