zoukankan      html  css  js  c++  java
  • java中求几个字符串的最大公共子串 使用了比较器Comparator

    package com.swift;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Max_Substring_Test {
    
        public static void main(String[] args) {
    
            /*
             * 几个字符串的最大公共子字符串
             */
    
            String str1 = "eriousdfndnfdlk";
            String str2 = "dkgfdkgkdjgdjgjksjgksgjsdkjsdierioe";
            String str3 = "ldskfjdskierundsnfjerioejrejrheruer3j43j4hj3";
            String sub;
            
            List<String> list=new ArrayList<String>();
    
            for (int i = 0; i < str1.length(); i++) {
                sub = str1.substring(0, i);
                
                if(str2.indexOf(sub)!=-1&&str3.indexOf(sub)!=-1) {
    //                System.out.println(sub);
                    list.add(sub);
                }
            }
            
            Collections.sort(list, new Comparator<String>() {
    
                @Override
                public int compare(String arg0, String arg1) {
                    int i=arg1.length()-arg0.length();
                    return i;
                }
                
            });
            
                System.out.println("The max subString is "+list.get(0));
        }
    
    }

     上面方法中测试的子串都是从第一个字母开始的,所以并不完全,子串还有很多,还有从第二个字母开始,从第三个字母开始,等等的子字符串

    所以,还应该再加一层循环,把substring(开始参数,结束参数)中开始和结束参数都设置为变量,开始参数从0开始到最后一个字母下标,结束参数起始位置要根据开始参数而定,否则会出现下标异常

    package com.swift;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Max_Substring_Test {
    
        public static void main(String[] args) {
    
            /*
             * 几个字符串的最大公共子字符串
             */
    
            String str1 = "eriousdfndnfdlk";
            String str2 = "dkgfdkgkdjgdjgjksjgksgjsdkjsdierioe";
            String str3 = "ldskfjdskierundsnfjerioejrejrheruer3j43j4hj3";
            String sub;
    
            List<String> list = new ArrayList<String>();
    
            for (int i = 0; i < str1.length(); i++) {
                for (int j = i; j < str1.length(); j++) {
                    System.out.println(sub = str1.substring(i, j+1));
    
                    if (str2.contains(sub)&& str3.contains(sub)) {
                        System.out.println(sub);
                        list.add(sub);
                    }
                }
            }
    
            Collections.sort(list, new Comparator<String>() {
    
                @Override
                public int compare(String arg0, String arg1) {
                    int i = arg1.length() - arg0.length();
                    return i;
                }
    
            });
    
            System.out.println("The max subString is " + list.get(0));
        }
    
    }
  • 相关阅读:
    G. Yash And Trees 线段树 + dfs序 + bitset
    网络流最小割 H
    P2764 最小路径覆盖问题 网络流重温
    P4016 负载平衡问题 网络流重温
    D. Yet Another Subarray Problem 思维 难 dp更好理解
    J
    20190709 暑训 区间种类数 莫队的学习
    E
    线段树 离散化 E. Infinite Inversions E. Physical Education Lessons
    CbsPersist
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8289900.html
Copyright © 2011-2022 走看看