從一字串中找出其無重複最長子串字元及長度

2021-08-21 08:17:58 字數 1853 閱讀 8311

question:

給定乙個字串,找出不含有重複字元的最長子串的長度。

ex:

給定"abcabcbb",沒有重複字元的最長子串是"abc",那麼長度就是3。

給定"bbbbb",最長的子串就是"b",長度是1。

給定"pwwkew",最長子串是"wke",長度是3。請注意答案必須是乙個子串"pwke"是 子串行  而不是子串。

solution:對字串中的每個字元進行遍歷,得到每個字元的最長不重複子串,比較,獲得整個字串的最長無重複子串。

public class string_length 

//定義allunique()使用集合將遍歷得到的字元放入set中,當重複時,返回false        

public static boolean allunique(string s, int start, int end)

return true;

} //主方法

public static void main(string args)

}

solution2:滑動視窗,完成對字元是否在當前的子字串中的檢查。使用 hashset 將字元儲存在當前視窗 [i,j)[i, j)[i,j)(最初 j=ij = ij=i)中。 然後我們向右側滑動索引 jjj,如果它不在 hashset 中,我們會繼續滑動 jjj。直到 s[j] 已經存在於 hashset 中。此時,我們找到的沒有重複字元的最長子字串將會以索引 iii 開頭。如果我們對所有的 iii 這樣做,就可以得到答案。

public static int lengthoflongestsubstring(string s) 

else

}system.out.println(ans);

return ans;

}

優化的滑動視窗:

public int lengthoflongestsubstring(string s) 

ans = math.max(ans, j - i + 1);

map.put(s.charat(j), j + 1);

}return ans;

}

2019-09-23增加獲取最長字元方法:

/**

* @description 獲取最長字元

* @author lin

* @date 2023年9月23日

* @param str

*/public static void getmaxstring(string str)

list.add(a);

length = math.max(length, list.size());

if(maxlist.size()<=list.size())

}} system.out.println("=strlist===" + strlist.tostring());

system.out.println("=maxlist===" + maxlist.tostring());

system.out.println("=length===" + length);

}

求字串中包含唯一字元的最長子串

給你乙個字串,找到只包含唯一字元的最長子串。given a string,find the longest sub sequence which contains only unique characters.維護兩個指標,左指標和右指標。同時用乙個hash表儲存左右指標之間的字元以及字元出現的位置...

無重複字串的最長子串

題目描述 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。解題思路 在解題之前我們先要知道如何輸入乙個字串,又不會浪費空...

3 無重複字串的最長子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...