程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Java笔试题目-获取最长不含重复子串的长度

balukai 2025-04-26 16:46:38 文章精选 18 ℃
题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
示例:
 s = "abcabcbb"
输出:3  最长字符串“abc”,所以长度为3
代码
public class LengthOfLongestSubstring {

    public static void main(String[] args) {
        String s = "abcabcbb";

        List<String> temp = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
           
            String prev = "";
           	// 子串由短到长
            for (int j = i-1; j > -1; j--) {
                String curr = s.substring(j, i);
                // 当前子串包含重复字符,则更长的一定包含
                if (hasRepeatChar(prev, curr)) {
                    break;
                }
                prev = curr;
                temp.add(curr);
            }
        }

        String longest = temp.stream().max(Comparator.comparing(String::length)).get();

        System.out.printf("longest is %s and length is %d", longest, longest.length());
    }

    public static boolean hasRepeatChar(String prev, String curr) {
        if (prev==null || prev.isEmpty()) {
            return false;
        }

        if (curr.length() == 1) {
            return false;
        }
        // 前一个子串比当前子串短1
        return prev.contains(curr.substring(0,1));
    }

#java##后端开发面试##算法##面试#

Tags:

最近发表
标签列表