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

简介: LeetCode3-无重复字符的最长子串

题目



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


示例



示例1:


输入: "abcabcbb"

输出: 3

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


示例2:


输入: "bbbbb"

输出: 1

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


示例3:


输入: "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


代码



package com.leetcode.code;
import java.util.HashMap;
import java.util.Map;
/** 
* LeetCode3-无重复字符的最长子串 
* 
* 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
* 
* 输入: "abcabcbb" 
* 输出: 3 
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 
* 
* 输入: "bbbbb" 
* 输出: 1 
* 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 
* 
* 输入: "pwwkew" 
* 输出: 3 
* 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 
*      请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 
*/
public class LeetCode3 {   
  public static int lengthOfLongestSubstring(String s) {     
    Map<Character, Integer> map = new HashMap<>();     
    int n = s.length();        
    int start = 0, end = 0, len = 0;  
    for (; start < n && end < n; end++) {    
      if (map.containsKey(s.charAt(end))) {      
        start = Math.max(start, map.get(s.charAt(end)) + 1);   
      }      
      map.put(s.charAt(end), end);        
      len = Math.max(len, end - start + 1);   
    }      
    return len;   
  }
    public static void main(String[] args) {    
      System.out.println(LeetCode3.lengthOfLongestSubstring("pwwkew"));  
    }
}


小结



复杂度分析:

  • 时间复杂度:O(n),索引将会迭代 n次。
  • 空间复杂度(HashMap):O(min(m, n))。
相关文章
|
4月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
4月前
|
算法
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
58 0
|
1月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
3月前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
|
3月前
|
存储 算法 数据可视化
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
|
2月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
23 0
|
3月前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
25 0
|
3月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
3月前
|
存储 算法 数据可视化
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
|
3月前
|
存储 算法 数据挖掘
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】