給定乙個字串,找出不含有重複字元的最長子串的長度。
示例:
給定"abcabcbb"
,沒有重複字元的最長子串是"abc"
,那麼長度就是3。
給定"bbbbb"
,最長的子串就是"b"
,長度是1。
給定"pwwkew"
,最長子串是"wke"
,長度是3。請注意答案必須是乙個子串,"pwke"
是 子串行 而不是子串。
思路:1.慢指標不動,快指標先走,每走一步,判斷快指標所指字元在位圖中是否已經存在,不存在,儲存字元資訊並繼續走,直到快指標指向重複字串;
2.若此時快指標 - 慢指標 > 已經記錄的字串長度,更新字串長度;
3.快指標不動,慢指標開始走,每走一步,將位圖中對應的字元資訊刪除,直至快慢指標所指的字元相同(此時快慢指標依舊是錯開的,慢指標指向快指標這個字元出現的第一次,快指標指向的是字元出現第二次),此時不刪除該字元的資訊,慢指標直接加加;
4.重複步驟1、2、3,直至快指標走到字串尾,當快指標指向尾,再判斷一次步驟2,返回子串串長度
int lengthoflongestsubstring(char* s) ;
while (*end != '\0')
else
while (*first != *end)
first++;
}end++;
}if (end - first > count)
return count;
}
上邊的方法實現起來很簡單。含有一種就是暴力解決發:
char* start = s;
char* end = s;
int sz = 0;
int num = 0;
int temp = 1;
int count = 0;
if (*s == null)
return 0;
while (*start != '\0') //bbbb
num++;
end++;
} if (sz>=temp)
start++;
} if (sz == 1 && num == 0)
return temp;
else if (sz == 1 && count > 1)
return temp + 1;
else if (sz == 0)
return count;
else
return temp;
LeetCode第3題題解 無重複字元的最長子串
題目 leetcode 題目描述 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 ...
LeetCode刷題實戰3 無重複字元的最長子串
題目描述 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 s bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 s pww...
leetcode刷題之路3 無重複字元的最長子串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。字元陣列和字串的區別,c語言字元陣列和字串區別詳解 開始的想法是在對字元陣列設定兩個指標,初始化乙個在位置0乙個在位置1,ans初始化...