給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。
1.自己的解法
classsolution
map.put(s.charat(i), i);
len=i-start+1;
if(len>max)
}return
max;
}}
記錄每乙個字元下次出現的位置,根據位置的更新最長長度會改變,start開始端的更新1.不能比當前的小2.再原始位置後移乙個;一開始想要設定乙個end位記錄最長字串的末尾,但是發現應該就是i對應的,所以沒有設定,而之前的長度記錄在max中
2.官方題解:
1.暴力解法:
對每個子字元判斷是否含有不同的字元:
publicclass
solution
public
boolean allunique(string s, int start, int
end)
return
true
; }
}
2.滑動視窗:
對[i,j)的字元都不在set中,判斷[i,j+1)在不在即右移視窗,當j在set中時,把i對應的字元從set中去除,i++對每個i重複操作:
classsolution
else
}return
ans;
}}
3.優化的滑動視窗(同我的做法):
與(2)相同,只不過將i更新為j+1
publicclass
solution
ans = math.max(ans, j - i + 1);
map.put(s.charat(j), j + 1);
}return
ans;
}}
4.ascii碼解法:
用ascii碼代替hashmap:
publicintlengthoflongestsubstring(string s)
return
ans;
}
3 無重複字元的最長字串
題目描述 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。s 由英文本母 數字 符號和空格組成。例項 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。link 解題思路 滑動視窗 1 我們使用兩個指標表示字串中某個子串的左右邊界。其中左...
3 無重複字元的最長字串
給定乙個字串,找出不含有重複字元的最長子串的長度。示例1 輸入 abcabcbb 輸出 3 解釋 無重複字元的最長子串是 abc 其長度為 3。示例2 輸入 bbbbb 輸出 1 主要思想 滑動視窗 使用乙個容器儲存遍歷的字元。遍歷字串,同時將不重複的字元儲存到視窗中,視窗的右邊界加一,相當於向右滑...
3 無重複字元的最長子串 字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...