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

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

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

求最短字符串里面出现的最长的子串 采用字符滚动的方式,很好理解。 定义左右两个指针,分别指向索引位置。 根据指针所在位置截取字符串,判断是否在另一个字符串中: 存在,则滚动右指针+1,重复上面的判断,直到字符串结束 不存在,左右指针同时滚动+1,重复上面的判断,直到字符串结束 (匹配的字符需要保留与下一个做比较,最终保留最先出现且最长的)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s1 = sc.next();
            String s2 = sc.next();

            String small,  big;
            if (s1.length() > s2.length()) {
                small = s2;
                big = s1;
            } else {
                small = s1;
                big = s2;
            }
            String longest = "";
            String sub = null;
            int left = 0;
            int right = 1;
            while (left < right && right <= small.length()) {
                sub = small.substring(left,right);
                if (big.contains(sub) && sub.length() > longest.length()) {
                    longest = sub;
                } else {
                    left++;
                }
                right++;
            }
            System.out.println(longest);
        }
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务