3. Longest Substring Without Repeating Characters

转载 2016年06月01日 14:37:04

题目:

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.


Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring,"pwke" is a subsequence and not a substring.


题意:

给定一个字符串,找到不包含重复元素的最长子串,返回最长子串的长度值;


思路:

输入的字符串都是字母,则新建一个数组,利用字母的ASCII码作为下标,将该字母出现的位置存储在数组中,下一次出现该字符时,下标作差即可求出重复元素之间的长度。

代码:C++版16ms

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        
        vector<int> charIndex(256, -1);
        int longest = 0, lastlen = 0;
        
        for(int i=0; i<s.size(); i++){
            lastlen = max(charIndex[s[i]]+1, lastlen);  //上一次出现当前元素的下标
            charIndex[s[i]] = i; //将当前元素出现的位置保存到数组中
            longest = max(longest, i-lastlen+1); 
        }
        
        return longest;
    }
};
java版:20ms

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        
        if(s.length()==0) return 0;
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int longest = 0;
        for(int i=0, j=0; i<s.length(); i++){
            if(map.containsKey(s.charAt(i))){
                j = Math.max(j, map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i), i);
            longest = Math.max(longest, i-j+1);
        }
        return longest;
    }
}
思路二:

使用set来保存不相同的最长子串,有不同的元素,则加入set集合中,否则移除set中的一个元素。

代码:java版:26ms

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        
        int i=0, j=0, longest = 0;
        Set<Character> set = new HashSet<>();
        
        while(j<s.length()){
            if(!set.contains(s.charAt(j))){
                set.add(s.charAt(j++));
                longest = Math.max(longest, set.size());
            }else{
                set.remove(s.charAt(i++));
            }
        }
        return longest;
    }
}


Leetcode全字符问题

目录 1、编号3 Longest Substring Without Repeating Characters 2、编号6 ZigZag Conversion 3、编号20 Valid Parent...
  • wangxiaojun911
  • wangxiaojun911
  • 2014年02月07日 08:09
  • 2823

【LeetCode-面试算法经典-Java实现】【003-Longest Substring Without Repeating Characters(最长非重复子字符串)】

【003-Longest Substring Without Repeating Characters(最长非重复子字符串)】给定一个字符串,找字符中的最大非重复子串用start记录当前处理的开始位置...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月17日 06:35
  • 3481

LeetCode Longest Palindromic Substring 最长回文子字符串 两种方法分析解答

最难想的地方:P代表一个表,比较难想的就是P表的下标i和j代表原字符串中的两个前后下标s[i]和s[j]的位置。 如果P[i,j]为真,当且仅当si-1,si-2...sj-1,sj这一个子串都为pa...
  • kenden23
  • kenden23
  • 2013年11月23日 10:27
  • 2815

LeetCode3 Longest Substring Without Repeating Characters

  • 2018年01月09日 20:06
  • 11KB
  • 下载

【Leetcode】 3. Longest Substring Without Repeating Characters

题目: Given a string, find the length of the longest substring without repeating characters.Examples:...
  • Artemis96
  • Artemis96
  • 2016年09月04日 21:09
  • 254

LeetCode No.3 Longest Substring Without Repeating Characters

题目Given a string, find the length of the longest substring without repeating characters.Examples:Giv...
  • Andy_Shan
  • Andy_Shan
  • 2016年09月02日 21:15
  • 169

leetcode No3. Longest Substring Without Repeating Characters

Question: Given a string, find the length of the longest substring without repeating characters. ...
  • u011391629
  • u011391629
  • 2016年06月15日 09:37
  • 329

LeetCode 题解 3. Longest Substring Without Repeating Characters(最长不含重复字符的子字符串)

LeetCode 题解 3. Longest Substring Without Repeating Characters(最长不含重复字符的子字符串)...
  • qq_25827845
  • qq_25827845
  • 2017年06月17日 16:19
  • 1311

LeetCode Algorithms 3. Longest Substring Without Repeating Characters 题解

题目: Given a string, find the length of the longest substring without repeating characters.
  • qq_22652929
  • qq_22652929
  • 2017年03月03日 16:52
  • 162

《LeetBook》leetcode题解(3):Longest Substring Without Repeating Characters[M]——哈希判断重复

003. Longest Substring Without Repeating Characters[M]题目:Given a string, find the length of the long...
  • hk2291976
  • hk2291976
  • 2016年04月05日 20:51
  • 443
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3. Longest Substring Without Repeating Characters
举报原因:
原因补充:

(最多只允许输入30个字)