题目
Given a string, find the length of the longest substring without repeating characters.
求给定字符串中,不包含重复字符的最长字字符串的长度
此题与 LeetCode#2 Add Two Numbers 一样属于串的算法。解法也类似,使用 map 保存过去的值,对原字符串只遍历一次。关键点在于发现重复字符时回退的计算、index 记录的擦除。
代码
这里给出 golang 的最优解
1 | func lengthOfLongestSubstring(s string) int { |
上解中,有对 map 的删除操作,假设原字符串实际上长度有限,可以省略掉 map 的删除,进一步空间换时间
1 | func lengthOfLongestSubstring(s string) int { |
此版本运行结果为
Runtime: 8 ms, faster than 84.25% of Go online submissions for Longest Substring Without Repeating Characters.
Memory Usage: 3.1 MB, less than 49.12% of Go online submissions for Longest Substring Without Repeating Characters.
如果极端追求更少的代码行数,可以参考官网解答中给出的 java 解
1 | public class Solution { |
官网也提供了把原字符串中字符当做 128bit 的 ASCII,使用 bit map 替代 map/hashmap 的解法,应自行斟酌。