码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Longest Substring Without Repeating Characters

时间:2015-02-01 19:13:07      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:longest substring   string   hash   

Q: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.

最简单最暴力啊QAQ结果就是Time Limit Exceeded...一开始的想法是,第一,因为要求的子串要最长,所以我们取子串的时候从大到小取,对给定的字符串S[0,1,...,N-1]取子串时从S[0,1,2...,N-2]开始,然后是S[1,2,...,N-1],S[0,1,2,...,N-3],S[1,2,...,N-2],S[2,3,..,N-1]。以此类推;第二,判断所取字符串是否在原字符串中出现不止一次,我用的是string类型的find和rfind函数,分别从前端和后端查找所取子串,若查找的位置相同,则说明该子串只出现一次。

另外,对于形如"abbbbbc"的字符串,取出sub时判断一下sub的每个字符是否相等,若相等则返回1。

贴上暴力的code:

class Solution {
public:
	bool sameLetter(string s){
		char c = s[0];
		for (int i = 1; i < s.length(); i++){
			if (s[i] != c)
				return false;
		}
		return true;
	}

	int lengthOfLongestSubstring(string s) {
		string sub;
		int index1 = 0;
		int index2 = 0;
		for (int i = s.length() - 1; i >= 1; i--){
			for (int j = 0; j < s.length(); j++){
				if (i + j <= s.length()){
					index1 = 0;
					index2 = 0;
					sub = s.substr(j, i);
					index1 = s.find(sub);
					index2 = s.rfind(sub);
					if (index1 != index2){
						if (sameLetter(sub))
							return 1;
						else
							return sub.length();
					}

				}
			}
		}
		return 0;
	}
};
由于超出时间限制,并且展开原题中的tag,换了一个思路:使用哈希表,再使用两个指针,一个指针指向当前遍历的字符串的开始位置,如果遇到重复字符x,就将该指针的位置改为上一个x的位置后一个。并更新哈希表。

int lengthOfLongestSubstring(string s) {
		int hash[128];
		memset(hash, -1, 128 * sizeof(int));
		int start = 0;
		int maxLen = 0;
		int i;
		for (i = 0; i < s.length(); i++){
			if (hash[s[i]] != -1){
				if (maxLen < i - start)
					maxLen = i - start;
				memset(hash + start, -1, (hash[s[i]]-start)*sizeof(int));
				if (hash[s[i]]+1>start)
					start = hash[s[i]] + 1;
			}
			hash[s[i]] = i;
		}
		if (maxLen < i - start)
			maxLen = i - start;
		return maxLen;
	}



[LeetCode]Longest Substring Without Repeating Characters

标签:longest substring   string   hash   

原文地址:http://blog.csdn.net/kaitankedemao/article/details/43372999

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!