无重复字符的最长子串php,LeetCode - 无重复字符的最长子串 - Golang
題目:給定一個字符串,請你找出其中不含有重復字符的?最長子串的長度。
示例?1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 `"abc",所以其`長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 `"b"`,所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是?`"wke"`,所以其長度為 3。
請注意,你的答案必須是 **子串** 的長度,`"pwke"`?是一個_子序列,_不是子串。
基于Golang的代碼實現如下:
func lengthOfLongestSubstring(s string) int {
// 獲取字符串長度
l := len(s)
// 單個字符直接返回
if l <= 1 {
return l
}
// historyMax記錄歷史保存的最大長度
// currentMax記錄當次迭代下最大長度
historyMax, currentMax := 0, 0
// 定義最長無重復字符串的起點下標
start := 0
// 存儲字符的最新位置
tmp := map[string]int{}
for i := 1; i <= l; i++ {
// 判斷當前字符是否有記錄
if v, ok := tmp[s[i-1:i]]; ok {
// 如若有記錄,說明發現重復字符,記錄當下的最長值
if currentMax > historyMax {
historyMax = currentMax
}
// 當次迭代后的最大長度重新計算為去掉重復字符之前的長度
// 如abca,新的無重復字符串為bca
currentMax = currentMax - v + start + 1
// 刪掉重復字符之前所有字符的位置記錄
for j := start; j < v; j++ {
delete(tmp, s[j:j+1])
}
// 更新無重復字符串的起點下標
start = v
} else {
// 沒有找到重復字符則長度+1
currentMax++
}
// 永遠記錄當前字符的位置
tmp[s[i-1:i]] = i
}
// 返回最終的max長度
if currentMax > historyMax {
historyMax = currentMax
}
return historyMax
}
有疑問加站長微信聯系(非本文作者)
總結
以上是生活随笔為你收集整理的无重复字符的最长子串php,LeetCode - 无重复字符的最长子串 - Golang的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA回调函数的例子_javascri
- 下一篇: 动态规划算法php,php算法学习之动态