Question:
- Description :在给定字符串中,找出最长的无重复子串,并返回其长度。
- Limitation :
- Difficulty :
- easy
- medium
- hard
Solution.
Details :
- 我的算法运行时间368ms,但和之前看到过的4ms的代码采用了相同的算法,都是“i++,判断s[0,i)是否含有重复字符”。
只是在具体的实现过程中,我采用了map[uint8]int结构用来保存s[0,i),当时为了图方便(可以使用v,ok := map[s[i]];ok
快速判断);也想到过用slice优化(毕竟map的value没用到,还想到了使用strings.Contains()
判断)。
但还是略逊一筹:4ms的示例代码采用int[128]
保存不重复的字符;今天更是发现了一个很新颖的处理方式:
cstr += fmt.Sprintf("%s", string(i))
结果显示,该算法使用存储6.1M,是已提交的所有Go实现中最少的。
Summary :
index, rune := range s
使用range遍历字符串,只使用一个左值得到的是索引(或者说是字符串中的字符下标?),使用两个左值依次可以得到索引和rune
类型字符