LeetCode #03:无重复字符的最长子串
内容纲要

题目

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

提示

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

注意

你的答案必须是 子串 的长度,而不是一个子序列。

思路

使用Set集合的元素不重复的特性来解题,每一次对字符串的字符进行判定,如果不存在Set中则加入,存在则删除开始下一轮判定。全程思路在代码演示中给出。

/**
  * @author: LoungeXi
  **/
public class Solution {
    public int lengthOfLongestSubstring(String str) {
        // 利用 set 的不可重复元素特点进行判断
        Set<Character> set = new HashSet<>();
        int result=0;
        int leftPointer=0;
        int rightPointer=0;
        // 右指针还没到字符串尾部时继续循环
        while(rightPointer<str.length()){
            // 得到右指针当前指向的字符
            if(!set.contains(str.charAt(rightPointer))){
                // 如果 set 中不含有该字符则加入该字符
                set.add(str.charAt(rightPointer));
                // 右指针自增;
                rightPointer++;
                // 更新结果
                result= Math.max(result,set.size());
            }else {
                // 如果 set 中含有该字符则删除左指针指向的字符,因为程序一开始指针指向的都是传入字符串的第一个字符,删除后自增即为开始下一轮判定
                // 如果使用两个for循环来解题 左指针相当于外循环的索引
                set.remove(str.charAt(leftPointer));
                // 左指针自增;
                leftPointer++;
            }
        }
        return result;
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
变装