题解 | #查找两个字符串a,b中的最长公共子串#只用了一个for循环

查找两个字符串a,b中的最长公共子串

http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

import java.util.*;

public class Main {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
        String str1 = sc.next();
        String str2 = sc.next();
        //保证第一个参数为较短串
        if(str1.length()<str2.length()){
            System.out.println(test(str1,str2));
        }else {
            System.out.println(test(str2,str1));
        }

    }
}

//求最长公共子串,str1为较短串
public static String test(String str1, String str2) {
    //如果str1为str2子串,直接返回
    if (str2.contains(str1)) {
        return str1;
    }
    
    int len = str1.length() - 1;//记录最长公共子串的长度
    for (int i = 0; i < str1.length(); i++) {
        if(len == 0){ //说明没有公共子串
            break;
        }
        if (i + len <= str1.length()) { //在str1中截取长度len的子串,如果是str2的子串则返回
            String s = str1.substring(i, i + len);
            if (str2.contains(s)) {
                return s;
            }
        } else {
            len--;
            i = -1;
        }
    }
    return null;
}

}

全部评论
大哥,你这就...你是没写循环,但系统仍在循环啊。。
3 回复 分享
发布于 2022-05-31 22:53
你这个循环有点不正规呀
2 回复 分享
发布于 2022-12-13 19:19 山东
牛逼,重启循环 -1
2 回复 分享
发布于 2023-01-13 23:27 浙江
一开始还没看懂,直到看到i = -1;牛啊,一个for 循环...
点赞 回复 分享
发布于 2022-06-21 15:23
这方法好强啊
点赞 回复 分享
发布于 2022-06-29 01:04
i = -1是什么意思呢?
点赞 回复 分享
发布于 2022-07-09 23:59
i= -1也太牛了吧 不符合条件直接重启循环
点赞 回复 分享
发布于 2022-11-25 10:55 北京

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 评论 收藏
分享
29 6 评论
分享
牛客网
牛客企业服务