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

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

作者头像
悠扬前奏
发布2020-05-18 15:12:56
1390
发布2020-05-18 15:12:56
举报

题目

描述

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

示例 1:

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

示例 2:

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

示例 3

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

解答

思路

利用队列使用头尾双指针。

代码

代码语言:javascript
复制
class Solution {
    public int lengthOfLongestSubstring(String s) {
        //  将String转换为sb
        StringBuilder sb = new StringBuilder(s);
        // 队列,方便双指针移动
        LinkedList<Character> ss = new LinkedList<>();
        // 当前最长字串的长度
        int max = 0;
        // 循环每个字符
        for (int i = 0; i < sb.length(); i++) {
            char a = sb.charAt(i);
            if (!ss.contains(a)) {
                // 如果队列中不存在,直接插入
                ss.add(a);
            } else {
                // 如果队列中存在,从队列首依次推出到该字符
                while (ss.pop() != a) {
                }
                // 再把字符添加到队列尾
                ss.add(a);
            }
            // 判断子字符最长长度
            if (max < ss.size()) {
                max = ss.size();
            }
        }
        // 返回结果
        return max;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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