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.
題目地址:https://leetcode.com/problems/longest-substring-without-repeating-characters/
題目意思:給出一個字符串,輸出最長的子串的長度,子串不能有重復的字符。(子串是連續的。)
解題思路: 依次讀取字符串的每一個字符,如果第一次出現則當前子串長度+1,否則:首先判斷當前長度是否大於最大長度,是則替換最大長度。然後
查找重復的字符是在原字符串哪裡出現的。
代碼如下:
1 int lengthOfLongestSubstring(char* s) { 2 int maxlen = 0,currlen = 0; 3 int table[128], i, j, start = 0; 4 memset(table, 0, sizeof(table)); 5 for (i = 0; s[i] != '\0'; ++i){ 6 if( (++table[s[i]]) == 2 ){ 7 if (currlen > maxlen){ 8 maxlen = currlen; 9 } 10 for(j = start; j < i; ++j){ //start記錄重復的字符後一個位置 11 if (s[j] == s[i]){ 12 table[s[j]] = 1; 13 start = j+1; 14 break; 15 }else{ 16 --currlen; 17 table[s[j]] = 0; 18 } 19 } 20 }else{ 21 ++currlen; 22 } 23 } 24 if (currlen > maxlen){ 25 maxlen = currlen; 26 } 27 return maxlen; 28 }