无重复字符的最长子串

147 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

二、思路分析:

  1. 首先子串怎么查找:从父串任意位置往后截取任意长度的串。

  2. 怎么分析是不含有重复字符:从父串任意位置开始,逐个字符往后截取任意长度的串,当前字符不在已截取的串里面,则继续往后截,直到出现重复字符。

  3. 找出所有不重复的子串,返回其中长度最大的子串长度。

  4. 从上面逻辑知道了怎么查找不重复的子串,可以采用两个循环,把所有的不重复的子串都枚举出来,取里面长度最长的一个子串。该子串的长度就是要返回的结果。

三、通过代码:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 空判断
        if (s == null) {
            return 0;
        }
        // 空白字符判断
        if (s.length() == 1) {
            return 1;
        }
        int maxLength = 0;
        String maxSubStr = null;
        // 冒泡循环判断
        for (int i = 0; i < s.length() - 1; i++) {

            String subStr = "" + s.charAt(i);
            for (int j = i + 1; j < s.length(); j++) {

                if (!subStr.contains("" + s.charAt(j))) {
                    subStr += s.charAt(j);
                } else {
                    break;
                }

            }

            maxSubStr = subStr.length() > maxLength ? subStr : maxSubStr;
            maxLength = subStr.length() > maxLength ? subStr.length() : maxLength;

        }
        return maxLength;
    }
} 

四、总结:

  1. 注意下空值和空白串的处理。

  2. 这是采用的两个循环冒泡的方式实现的,时间复杂度略高O(n2)O(n^2),大家有好的方法,欢迎交流~