求两字符串的最大相同子串--JAVA实现

啥也不说了 都在代码里了 ^-^

package 面试小算法.相同子串;

import java.util.ArrayList;
import java.util.List;

import 面试小算法.Test04;

public class Test {
    /*
     * 总体思路为:先找出小字符串 外层循环遍历小字符串 内层循环遍历小字符串索引+1的字符串
     * 从小字符串中截取(外层索引,内层索引)
     * 判断 分两种 当可以为本身字符串时 只要大字符串中包含次字符串就为true
     * 当不能为本身字符串时 且真并为本身时 判断大字符中是否包含此字符串 如包含则为true
     * 上述两个有一个成立就判断当前字符串长度是否大于当前存最大字符串长度的变量
     * 如大于则清空集合中元素并把最大字符串长度变为当前字符串长度,再往集合中添加这个元素
     * 如果等于当前集合的最大元素则直接添加进去就OK了。 
     */
    public List<String> searchMaxString(String s1,String s2,boolean isSelf){
        //获取大字符串 和 小字符串
        String shortS = s1.length()>s2.length()?s2:s1;
        String longS = s1.length()>s2.length()?s1:s2;
        //判断当前子串长度是否是最长的
        int length = 0;
        //存储结果 之所以用集合是因为可能有多个长度相同的子串
        List<String> result = new ArrayList<String>();
        for(int i=0;i<shortS.length();i++){
            for(int j=i+1;j<=shortS.length();j++){
                //截取当前位置起的长度
                String temp = shortS.substring(i,j);
                //可以等于自身时
                boolean flag1 = isSelf && longS.contains(temp);
                //不可以等于自身时
                boolean flag2 = !isSelf && temp!=shortS && longS.contains(temp);
                //假如满足其中一条
                if(flag1 || flag2){
                    //假如长度当于当前最小子串清空集合并添加元素
                    if(temp.length()>length){
                        length = temp.length();
                        result.clear();
                        result.add(temp);
                        //假如等于添加进集合
                    }else if(temp.length()==length){
                        result.add(temp);
                    }
                }
            }
        }
        return result;
    }

    public static void main(String[] args){
        String a = "abceLoveXyzasfdalllllfdsafdsfds";
        String b = "erebgdLovegureererfdsfdsalllllfdsafdsa";
        List<String> result = Test04.getMaxSameSubStr(a, b, true);
        for(String s:result){
            System.out.println(s);
        }
    }

}   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值