求字串中不含重複字元的最長子串
今天逛脈脈,在上面看到一個求字串中不含重複字元的最長子串,如果突然看到這個題,當時真的是寫不出,更何況最優解了,這個題以前出去面試的時候被考到過,當時也沒有寫出來,所以在網上看了這道題的答案後自己試著寫了下,並將自己的理解記錄下來
總體思路:
1.設定兩個遊標,一左一右,剛開始都設定成0,設定一個set,用來存放不含重複字串的子字串;
2.從零的位置開始遍歷字串,如果set裡面不含這個字元就將這個字元放入set中,右遊標右移一位,通過左右遊標獲取最長的字串,最後一次出現的就是所求的不重複最長子字串
3.如果遍歷的字元已經存在set中了,那就啟動左遊標,找到重複字元第一次出現的位置,在尋找的過程中,將重複字元第一次出現的位置之前的字元都去掉,只到找到將重複字元第一次出現的位置後,再啟動右遊標開始擴充
public static int getMaxLength(String str){
int length = str.length();
int i=0;//右遊標
int j=0;//左遊標
int maxLength = 0;
//用於儲存不重複的字元
HashSet<String> hashSet = new HashSet<>();
while(i<length&&j<length){
String end = str.substring(i,i+1);
/**
* 當字元沒有重複的時候,右遊標i往右前進一位
*/
if(!hashSet.contains(end)){
hashSet.add(end);
i++;
if(i-j>maxLength){
maxLength = i-j;
System.out.println("最大子字串:"+str.substring(j,i));
}
}else{
/**
* 當字串有重複的時候,就得找到重複字元第一個出現的位置,
* 並將左遊標j移到重複字元第一個出現的位置後面一位,
* 然後再來擴充套件右遊標
*/
String start = str.substring(j,j+1);
hashSet.remove(start);
j++;
}
}
return maxLength;
}
public static void main(String[] args) throws Exception {
int maxlengtn = getMaxLength("abcabcbbqwertykokj");
System.out.println("最長長度是:"+maxlengtn);
}
輸出結果:
最大子字串:a
最大子字串:ab
最大子字串:abc
最大子字串:bqwe
最大子字串:bqwer
最大子字串:bqwert
最大子字串:bqwerty
最大子字串:bqwertyk
最大子字串:bqwertyko
最長長度是:9
相關文章
- 最長不含重複字元的子字串字元字串
- JZ-073-最長不含重複字元的子字串字元字串
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 無重複字元的最長子串字元
- 3 無重複字元的最長子串字元
- LeetCode——無重複字元的最長子串LeetCode字元
- java無重複字元的最長子串Java字元
- LCR 016. 無重複字元的最長子串(中)字元
- leetcode 之無重複字元的最長子串LeetCode字元
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- 3. 無重複字元的最長子串字元
- 演算法-無重複字元的最長子串演算法字元
- LeetCode-3. 無重複字元的最長子串LeetCode字元
- Leetcode 3. 無重複字元的最長子串LeetCode字元
- 【每日一題】無重複字元的最長子串每日一題字元
- leetcode-3無重複字元的最長子串LeetCode字元
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是LeetCode字串字元
- LeetCode題集-3 - 無重複字元的最長子串LeetCode字元
- 每日leetcode——3. 無重複字元的最長子串LeetCode字元
- 演算法練習:求字串的最長重複子串(Java實現)演算法字串Java
- Leetcode[字串] 3. 無重複字元的最長子串 10行極簡寫法!LeetCode字串字元
- #leetcode刷題之路3-無重複字元的最長子串LeetCode字元
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- LeetCode3:Longest Substring Without Repeating Characters(無重複字元的最長子串)LeetCode字元
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- 每天一道演算法題:無重複字元的最長子串演算法字元
- Leetcode 3.無重複字元的最長子串 字典記錄每個字元最後出現的位置LeetCode字元
- leetcode無重複字元的最長字串 python實現LeetCode字元字串Python
- 讓我們一起啃演算法----無重複字元的最長子串演算法字元
- Leet Code 3. Longest Substring Without Repeating Characters (最長的沒有重複字元的子字串)字元字串
- 滑動視窗3.替換後最長重複字元子串字元
- Leetcode[字串] 5. 最長迴文子串LeetCode字串
- 最長子串
- 用 PHP 在 力扣 上演算法 [無重複字元的最長子串]{一天一更}PHP力扣演算法字元
- JavaScript刪除字串中重複字元JavaScript字串字元
- 演算法之字串——最長迴文子串演算法字串