LeetCode 第三题,Longest Substring Without Repeating Characters

原创 2014年08月03日 20:38:44

题目:

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第3题

3. Longest Substring Without Repeating Characters Given a string, find the length of the longest su...
  • q874724218
  • q874724218
  • 2016年07月03日 23:55
  • 372

Longest Substring Without Repeating Characters -- LeetCode

原题链接: http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/  这道题用的方法是在Leet...
  • linhuanmars
  • linhuanmars
  • 2014年02月26日 01:53
  • 18818

LeetCode(3) Longest Substring Without Repeating Characters

LeetCode的第3题,给定一个字符串,找到其中的一个最长的字串,使得这个子串不包含重复的字符。 // // Solution.h // LeetCodeOJ_003_LongestUnique...
  • feliciafay
  • feliciafay
  • 2013年11月23日 04:25
  • 16830

Longest Substring Without Repeating Characters 最长不重复字符的字串 @LeetCode

Method 1 (Simple) We can consider all substrings one by one and check for each substring whether it ...
  • hellobinfeng
  • hellobinfeng
  • 2014年01月05日 01:56
  • 3307

leetcode 3 Longest Substring Without Repeating Characters最长无重复子串

Given a string, find the length of the longest substring without repeating characters. For example, ...
  • wangyaninglm
  • wangyaninglm
  • 2016年04月05日 22:27
  • 2648

leetcode:3. Longest Substring Without Repeating Characters (java)

题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目: Given a str...
  • j754379117
  • j754379117
  • 2016年06月20日 20:36
  • 837

LeetCode 3.Longest Substring Without Repeating Characters c语言版

问题描述: Given a string, find the length of the longest substring without repeating characters. Exa...
  • banana1006034246
  • banana1006034246
  • 2017年07月15日 17:35
  • 293

[LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)

[LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年02月27日 12:55
  • 5775

LeetCode 3 — Longest Substring Without Repeating Characters (C++ Java Python)

题目:http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/] Given a string, ...
  • dragon_dream
  • dragon_dream
  • 2014年02月18日 22:22
  • 4656

leetcode 3. Longest Substring Without Repeating Characters 最长不重复子串和重复子串

Given a string, find the length of the longest substring without repeating characters. Examples:Giv...
  • JackZhang_123
  • JackZhang_123
  • 2017年08月29日 19:07
  • 152
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 第三题,Longest Substring Without Repeating Characters
举报原因:
原因补充:

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