给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
//方法一:暴力法
// func lengthOfLongestSubstring(s string) int {
// if len(s)==1{
// return 1
// }else if len(s)== 0{
// return 0
// }
// mymap := make(map[int]string)
// for i:=0;i<len(s);i++{
// for j:=i+1;j<len(s);j++{
// if strings.ContainsRune(s[i:j],rune(s[j]))==true{
// mymap[j-i] = s[i:j]
// break
// }
// if j==len(s)-1{
// mymap[len(s)-i] = s[i:]
// }
// // fmt.Println("mymap:",mymap)
// }
// }
// max := 0
// for k, _ := range mymap{
// // fmt.Printf("k:%d,v:%s",k,v)
// // fmt.Println()
// if k>max{
// max = k
// }
// }
// return max
// }
//方法二:滑动窗口
func lengthOfLongestSubstring(s string) int {
mymap := make(map[byte]bool)
left := 0
max := 0
for i:=0;i<len(s);i++{
for mymap[s[i]]{
mymap[s[left]] = false
left++
}
mymap[s[i]] = true
if i-left+1 > max{
max = i-left+1
}
}
return max
}
本文探讨了如何找出字符串中不含有重复字符的最长子串的长度,通过两个方法进行讲解:一是暴力法,二是更高效的滑动窗口法。文章提供了详细的代码实现,帮助读者理解并掌握这一算法。
881

被折叠的 条评论
为什么被折叠?



