原题链接: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
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: 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码可以表示256个字符,所以开了个257的哈希表。遍历每个字符,如果没出现过,当前子串长++。
下面是源代码:
int lengthOfLongestSubstring(char* s) {
int i, j, len, longest;
int map[257];
longest = 0;
len = strlen(s);
if(len == 0 || len == 1) return len;
for (i = 0; i <= len - 2; i++) {
memset(map, 0, sizeof(map)); //1 :之前出现过,0:之前没有出现过
int curlong = 1;
map[(int)s[i]] = 1;
for (j = i + 1; j <= len - 1; j++) {
if (map[(int)s[j] ]) break;
curlong++;
map[(int)s[j] ] = 1;
}
longest = longest > curlong ? longest : curlong;
}
return longest;
}