LeetCode 第三题,Longest Substring Without Repeating Characters

题目:

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length
of 1.

题意:

就是寻找一个给定字符串中的不重复最长字串的长度。

比如abcdab,最长的串位abcd或cdab,长度位4.

解法:

第一种方法是暴搜,不过显然会超时,所以没有尝试。

第二种方法是暴搜的改良版:

代码如下:

class Solution {
public:
    int lengthOfLongestSubstring(string s)
    {
		int index = 0;
		int max = 0;
		int len = s.length();
		if( len == 0)
		return 0;
		if (len ==1)
		return 1;
		for (int i =1; i< len; i++)
		{
			for(int j=i-1; j>=index; j--)
			{
				if(s[i] == s[j])
				{
					index = j+1;
					break;
				}
				else
				{
					if(max < i-j+1)
					max = i - j +1;
				}
			}
		}
		return max;
    }
};

即是寻找当前下标到字串start是否有重复字符,重复则将start置为重复下标加一。

第三种方法显然是hash表,用一个hash table保存每个字符上一次出现过的位置。从前往后扫描,假如发现字符上次出现过,就把当前子串的起始位置start移动到上次出现过的位置之后——这是为了保证从start到i的当前子串中没有任何重复字符。同时,由于start移动,当前子串的内容改变,start移动过程中经历的字符都要剔除。

代码如下:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int start = 0; // current start point of substring without dup
        int maxlen = 0; // max length of substring found
        int table[256]; // hash table for index of each char appeared
        for (int i = 0;i < 256;i++) table[i] = -1; // if char not present, index is -1
        int len = s.length();
        for (int i = 0;i < len;i++) {
            if (table[s[i]] != -1) {
                while (start <= table[s[i]]) table[s[start++]] = -1;
            }
            if (i - start + 1 > maxlen) maxlen = i - start + 1;
            table[s[i]] = i;
        }
        return maxlen;
    }
};

而第二种方法和第三种方法时间差距如下:

LeetCode 第三题,Longest Substring Without Repeating Characters,布布扣,bubuko.com

时间: 2024-10-06 05:49:25

LeetCode 第三题,Longest Substring Without Repeating Characters的相关文章

LeetCode 第 3 题(Longest Substring Without Repeating Characters)

LeetCode 第 3 题(Longest Substring Without Repeating Characters) 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 "b

Leetcode第三题_Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters Total Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the

LeetCode解题笔记 - 3. Longest Substring Without Repeating Characters

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.

Leetcode经典试题:Longest Substring Without Repeating Characters解析

题目如下: Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: "bbbbb" Output: 1 E

leetcode_3题——Longest Substring Without Repeating Characters(set,哈希表,两个指针)

Longest Substring Without Repeating Characters Total Accepted: 62719 Total Submissions: 298285My Submissions Question Solution Given a string, find the length of the longest substring without repeating characters. For example, the longest substring w

LeetCode(3)Longest Substring Without Repeating Characters

题目: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest s

LeetCode【3】.Longest Substring Without Repeating Characters--算法图解及java实现

第三道题Longest Substring Without Repeating Characters如下:     Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", whic

【leetcode刷题笔记】Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest subst

LeetCode第[3]题(Java):Longest Substring Without Repeating Characters 标签:Linked List

题目中文:没有重复字符的最长子串 题目难度:Medium 题目内容: 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 &q