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

LeetCode - 无重复字符的最长子串

作者头像
晓痴
发布2019-07-24 11:48:07
4260
发布2019-07-24 11:48:07
举报
文章被收录于专栏:曌的晓痴

这题仍然是3年前的作品,中等难度的一道题目,每次看自己以前写的代码,毫无注释,然后重新去理解自己的思路,去写解题思路真是痛苦啊...以后得慢慢补上这些注释.

原题地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

解题思路:

我当时提交的解题思路是:从头往后遍历,判断当前的字符是否在当前的StringBuilder字符子串中,如果不在就添加进字符子串里面,否则判断当前字符子串的长度和之前的最长字符子串长度,取最大值;

现在的想法是,不用StringBuilder,直接用HashSet,保证无重复,减少StringBuilder.indexOf的时间消耗;比较最长的长度时,直接获取HashSet.size();

个人题解:

代码语言:javascript
复制
public int lengthOfLongestSubstring(String s) {
        int max = 0;
        StringBuffer sb = new StringBuffer();
        for (char c : s.toCharArray()) {
            if (sb.indexOf(String.valueOf(c)) == -1) {
                sb.append(c);
            } else{
                max = (max >= sb.length() ? max : sb.length());
                sb.delete(0, sb.indexOf(String.valueOf(c)) + 1);
                sb.append(c);
            }
        }
        return (max >= sb.length() ? max : sb.length());
    }

结果:

这题的结果相对第二题就好点了...不过还是只有50+%的水准

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

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

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

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