求字串中不含重複字元的最長子串
今天逛脈脈,在上面看到一個求字串中不含重複字元的最長子串,如果突然看到這個題,當時真的是寫不出,更何況最優解了,這個題以前出去面試的時候被考到過,當時也沒有寫出來,所以在網上看了這道題的答案後自己試著寫了下,並將自己的理解記錄下來
總體思路:
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. 最長不含重複字元的子字串字元字串
- 無重複字元的最長子串字元
- java無重複字元的最長子串Java字元
- 3 無重複字元的最長子串字元
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 3. 無重複字元的最長子串字元
- LeetCode——無重複字元的最長子串LeetCode字元
- 演算法-無重複字元的最長子串演算法字元
- 【每日一題】無重複字元的最長子串每日一題字元
- LCR 016. 無重複字元的最長子串(中)字元
- (字串雜湊表)找到字串中不重複出現字元的最長子串長度字串字元
- leetcode 之無重複字元的最長子串LeetCode字元
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- 演算法練習:求字串的最長重複子串(Java實現)演算法字串Java
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- leetcode-3無重複字元的最長子串LeetCode字元
- LeetCode-3. 無重複字元的最長子串LeetCode字元
- Leetcode 3. 無重複字元的最長子串LeetCode字元
- LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是LeetCode字串字元
- 每日leetcode——3. 無重複字元的最長子串LeetCode字元
- LeetCode題集-3 - 無重複字元的最長子串LeetCode字元
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- Leetcode[字串] 3. 無重複字元的最長子串 10行極簡寫法!LeetCode字串字元
- SPOJ 687. Repeats(字尾陣列求最長重複子串)陣列
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- #leetcode刷題之路3-無重複字元的最長子串LeetCode字元
- 每天一道演算法題:無重複字元的最長子串演算法字元
- 【谷歌面試題】找出字串中只包含兩種字元的最長子串谷歌面試題字串字元
- POJ 3693 Maximum repetition substring(字尾陣列求最長重複子串)陣列
- 讓我們一起啃演算法----無重複字元的最長子串演算法字元
- [LeetCode] Longest Substring Without Repeating Characters 最長無重複字元的子串LeetCode字元
- 兩個字串的最長公共子串字串
- Leetcode 3.無重複字元的最長子串 字典記錄每個字元最後出現的位置LeetCode字元
- POJ 1743 Musical Theme (字尾陣列,求最長不重疊重複子串)陣列
- LeetCode3:Longest Substring Without Repeating Characters(無重複字元的最長子串)LeetCode字元
- poj 2774 求兩字串的最長公共子串 字尾陣列字串陣列