【leetcode】【java】【3、無重複字元的最長子串】
我的解法:
public int lengthOfLongestSubstring(String s) {
//先考慮邊界情況
if(s.length()==0) {
return 0;
}
if(s.length()==1) {
return 1;
}
//使用一個set記錄是否重複
Set<Character> set = new HashSet();
int res = 1;
for(int i=0;i<s.length();i++){
//包含s[i]的最長串的值
Character p = s.charAt(i);
set.add(p);
for(int j=i+1;j<s.length();j++){
Character q = s.charAt(j);
//如果重複,結束此次遍歷,i++,否則繼續向前遍歷,更新set集合與res
if(set.contains(q)){
set.clear();
break;
}else{
set.add(q);
res = Math.max(res, set.size());
}
}
}
return res;
}
大神的解法:
public int lengthOfLongestSubstring(String s) {
if (s.length()==0) return 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int max = 0;
int left = 0;
for(int i = 0; i < s.length(); i ++){
if(map.containsKey(s.charAt(i))){
//如果遇到重複值,左邊座標(從上一個位置)跳到該重複值的下一個位置
left = Math.max(left,map.get(s.charAt(i)) + 1);
}
map.put(s.charAt(i),i);
max = Math.max(max,i-left+1);
}
return max;
}
作者:powcai
連結:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
本質上都是滑動窗,但是大神的解法更加優雅,通過map的key記錄出現的字母,value位置資訊。
相關文章
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- 3 無重複字元的最長子串字元
- java無重複字元的最長子串Java字元
- leetcode-3無重複字元的最長子串LeetCode字元
- LeetCode-3. 無重複字元的最長子串LeetCode字元
- Leetcode 3. 無重複字元的最長子串LeetCode字元
- LeetCode——無重複字元的最長子串LeetCode字元
- 3. 無重複字元的最長子串字元
- 無重複字元的最長子串字元
- 每日leetcode——3. 無重複字元的最長子串LeetCode字元
- LeetCode題集-3 - 無重複字元的最長子串LeetCode字元
- leetcode 之無重複字元的最長子串LeetCode字元
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- #leetcode刷題之路3-無重複字元的最長子串LeetCode字元
- 演算法-無重複字元的最長子串演算法字元
- 【每日一題】無重複字元的最長子串每日一題字元
- LeetCode3:Longest Substring Without Repeating Characters(無重複字元的最長子串)LeetCode字元
- Leetcode[字串] 3. 無重複字元的最長子串 10行極簡寫法!LeetCode字串字元
- Leetcode 3.無重複字元的最長子串 字典記錄每個字元最後出現的位置LeetCode字元
- [LeetCode] Longest Substring Without Repeating Characters 最長無重複字元的子串LeetCode字元
- LCR 016. 無重複字元的最長子串(中)字元
- 求字串中不含重複字元的最長子串字串字元
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是LeetCode字串字元
- 每天一道演算法題:無重複字元的最長子串演算法字元
- 讓我們一起啃演算法----無重複字元的最長子串演算法字元
- leetcode 解題 3. 無重複字元的最長子串-python3@ 官方,暴力解法和視窗滑動解法LeetCode字元Python
- 最長不含重複字元的子字串字元字串
- 【Leetcode】3. Longest Substring Without RepeatingCharacters無重最長子串LeetCodeGC
- 滑動視窗3.替換後最長重複字元子串字元
- leetcode無重複字元的最長字串 python實現LeetCode字元字串Python
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 用滑動視窗來解決最長無重複子串問題
- 演算法練習:求字串的最長重複子串(Java實現)演算法字串Java
- 用 PHP 在 力扣 上演算法 [無重複字元的最長子串]{一天一更}PHP力扣演算法字元
- JZ-073-最長不含重複字元的子字串字元字串
- 【LeetCode】424. 替換後的最長重複字元LeetCode字元
- java 最長迴文子串Java