请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
数据范围:
"abcabcbb"
3
因为无重复字符的最长子串是"abc",所以其长度为 3。
"bbbbb"
1
因为无重复字符的最长子串是"b",所以其长度为 1。
"pwwkew"
3
因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ func lengthOfLongestSubstring(s string) int { // write code here var char2Index = make(map[int32]int, len(s)) var maxSub = 0 var currentSubLen = 0 var getMax = func(a, b int) int { if a > b { return a } return b } var left int for index, char := range s { if charIdx, exist := char2Index[char]; exist { if charIdx < left { currentSubLen += 1 } else { maxSub = getMax(currentSubLen, maxSub) currentSubLen = index - charIdx left = charIdx + 1 } } else { currentSubLen += 1 } char2Index[char] = index } maxSub = getMax(currentSubLen, maxSub) return maxSub }
package main import _"fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ func lengthOfLongestSubstring( s string ) int { cnt:=map[byte]bool{} var l,r int for i,ch:=range []byte(s){ if _,ok:=cnt[ch];!ok{ cnt[ch]=true }else{ r=i break } } max:=len(cnt) for ;r<len(s);r++{ for{ if _,ok:=cnt[s[r]];ok{ delete(cnt,s[l]) l++ }else{ break } } cnt[s[r]]=true if len(cnt)>max{ max=len(cnt) } } return max }