384. 最长无重复字符的子串

描述

给定一个字符串,请找出其中无重复字符的最长子字符串。

样例

例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3。
对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1。

挑战

O(n) 时间

思路

主要是利用两个指针解法

  1. 利用map标记当前字符是否出现过
  2. 对于当前 i , j 一直往前遍历,直到出现重复为止
  3. 对于出现重复的 j 就没必要继续往下遍历了,i 向前前进一格,同时将 hash 表中的 i 移除

代码

public class Solution {
    /**
     * @param s: a string
     * @return: an integer 
     */
    public int lengthOfLongestSubstring(String s) {
        int[] map = new int[256]; // map from character's ASCII to its last occured index
        
        int j = 0;
        int i = 0;
        int ans = 0;
        for (i = 0; i < s.length(); i++) {
            while (j < s.length() && map[s.charAt(j)]==0) {
                map[s.charAt(j)] = 1;
                ans = Math.max(ans, j-i + 1);
                j ++;
            }
            map[s.charAt(i)] = 0;
        }
        
        return ans;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...
    林大鹏阅读 7,727评论 0 6
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,679评论 0 89
  • 1. 问题定义 最长不重复子串:一个字符串中最长的没有重复字符的子串。举个🌰 : abcabcbb 最长子串 a...
    林大鹏阅读 14,091评论 0 2
  • 上一篇KMP算法之后好几天都没有更新,今天介绍最长回文子串。 首先介绍一下什么叫回文串,就是正着读和倒着读的字符顺...
    zero_sr阅读 7,166评论 2 8
  • 董卓败亡,蔡邕哭主见戮。后世以为首先蔡邕哭董卓固自不是,然后才是允之杀之翼亦为己甚。且试问蔡邕哭主,不是何在?蔡邕...
    黄七阅读 3,669评论 0 0