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

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

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

滑动窗口典例
import java.io.IOException;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        String word1 = scanner.nextLine();
        String word2 = scanner.nextLine();
        if (word1.length() < word2.length()) {
            String temp = word1;
            word1 = word2;
            word2 = temp;
        }
        int start = 0;
        int end = 1;
        String maxLengthChild = null;
        while (end <= word2.length()) {
            String child = word2.substring(start, end);
            if (word1.contains(child)) {
                if (maxLengthChild == null || child.length() > maxLengthChild.length()) {
                    maxLengthChild = child;
                }
            } else {
                //如果已经找到重复子串,当前end - start已经是最长重复子串的长度,
                //因此当当前窗口不匹配的时候,start指针和end指针都往后移一位,使得窗口长度不变,继续尝试下一个一样长度的重复子串
                start++;
            }
            //当当前窗口匹配到重复子串时,只有end往后移一位,使得窗口长度加1,尝试匹配更长的字符串
            end++;
        }
        System.out.println(maxLengthChild);
    }

}


全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务