• LeetCode No3 无重复字符的最长子串


    题目

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

    示例 1:

    输入: s = "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    示例 2:

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

    示例 3:

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

    提示:

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

    思路

    题目只需要求出不含有重复字符的最长子串的长度,只需要求长度的话就简单了,利用双指针的思想,先定义一个字符set,保存当前子串的所有字符,定义一个最长子串的开始坐标back,再定义一个最长子串的结束坐标front,最长字串长度max=Math.max(max, front-back+1) , 然后使用front遍历字符串,如果set里面没有包含当前遍历到的字符,则说明当前字符和之前的都不一样,直接front++,而如果set里面包含当前遍历到的字符,则说明之前有一样的字符,这个时候就需要将back移动至上一个同样的字符所在的坐标。

    AC代码

    点击查看代码
    class Solution {
        public int lengthOfLongestSubstring(String s) {
            Set<Character> chars = new HashSet<Character>();
            int back = 0;
            int front = 0;
            int max = 0;
            while(front < s.length()) {
                char currentChar = s.charAt(front);
                if (!chars.contains(currentChar)) {
                    chars.add(currentChar);
                    int tmpMax = front - back + 1;
                    if (tmpMax > max) {
                        max = tmpMax;
                    }
                } else {
                    char backChar = s.charAt(back);
                    while(backChar != currentChar) {
                        chars.remove(backChar);
                        ++back;
                        backChar = s.charAt(back);
                    }
                    ++back;
                }
                ++front;
            }
            return max;
        }
    }
    
  • 相关阅读:
    递归函数的写法笔记
    Spring项目中执行Java脚本
    关于秒杀的系统架构优化思路
    分布式搜索引擎Elasticsearch性能优化与配置
    分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)
    分布式搜索引擎Elasticsearch的查询与过滤
    Linux 下编译升级 Python
    搭建通过 ssh 访问的 Git 服务器
    分布式搜索引擎Elasticsearch的简单使用
    PHP 源码学习之线程安全
  • 原文地址:https://www.cnblogs.com/Asimple/p/16114423.html
Copyright © 2020-2023  润新知