前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最长子字符串

最长子字符串

作者头像
OPice
修改2023-09-21 15:49:52
3860
修改2023-09-21 15:49:52
举报
文章被收录于专栏:D·技术专栏

题目

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

代码语言:javascript
复制
输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解答

代码语言:javascript
复制
第一种
//1、穷举,从第一个字符开始,一次向后遍历,如果有相同字符,记录长度。
//2、继续从第二个字符,重复1步骤,比较长度,留下最长的
//3、重复2,返回最长result
public static int lengthOfLongestSubstring(String s) {
        int length = s.length();
        int result = 0;
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j <= length; j++) {
                //
                if (unique(s,i,j)) {
                    result = Math.max(result, j - i);
                }
            }
        }
        return result;
    }

    public static boolean unique(String s,int i, int j){
        HashSet<Character> strings = new HashSet<>();
        for (int k = i; k < j; k++) {
            char c = s.charAt(k);
            if (strings.contains(c)){
                return false;
            }else{
                strings.add(c);
            }
        }
        return true;
    }

第二种(滑动窗口)
public static int lengthOfLongestSubstring2(String s) {
        int length = s.length();
        HashSet<Character> characters = new HashSet<>();
        int result = 0, i = 0, j = 0;
         while (i < length && j <length){
             if (!characters.contains(s.charAt(j))){
                 characters.add(s.charAt(j));
                 j++;
                 result = Math.max(result,j-i);
             }else{
                 characters.remove(s.charAt(i));
                 i++;
             }
         }
         return result;
    }

分析

1、 第一种方式,时间复杂度 n3,这种方式在实际情况下是不可取的。 2、时间复杂度:O(2n) = O(n)O(2n)=O(n),在最糟糕的情况下,每个字符将被 ii 和 jj 访问两次。空间复杂度:O(min(m, n))O(min(m,n)),与之前的方法相同。滑动窗口法需要 O(k)O(k) 的空间,其中 kk 表示 Set 的大小。而 Set 的大小取决于字符串 nn 的大小以及字符集 / 字母 mm 的大小。

来源:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetcod/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解答
  • 分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档