求字串內不包含重複字元的最長子串的集合

2021-07-31 03:22:36 字數 1470 閱讀 8951

方法一:迴圈遍歷,採用set儲存資料,複雜度o(n^2)

private static setgetsublist(string str) 

setresult = new hashset();

int maxlength = 0;

stringbuilder sb = new stringbuilder();

char array = str.tochararray();

int length = array.length;

for (int i = 0; i < length; i++) else

}// system.out.println(j + "," + sb.tostring());

if (sb.length() > maxlength) else if (sb.length() == maxlength)

}} return result;

}

方法2:

採用乙個map來做中間快取,用list儲存結果,map的key儲存的是字元,value儲存的是該字元當前的位置,首先設定乙個當前current位置,預設從0開始,那麼從開始遍歷字串,如果map當中不包含這個字元,那麼用這個字元當前所在的位置減去current位置,然後與最大長度做比較,選大的成為最大長度,然後把當前字元的以及位置放入map,同時把從current位置的字元到current+maxlength位置的字元組成子串放入乙個list中,儲存前需要判斷當前list中已經儲存的字元的長度是否大於將要儲存的字元長度,小於則將list清除,複雜度 o(n)

public static listgetsublist2(string str)

maptempmap = new hashmap<>();

listresult = new arraylist();

stringbuilder sb = new stringbuilder();

int maxlength = 0;

char array = str.tochararray();

int length = array.length;

int current = 0;

for(int i=0;imaxlength){

maxlength = i-current+1;

sb.delete(0, sb.length());

for(int j=current;j0){

if(result.get(0).length()0){

if(result.get(0).length()maxlength){

maxlength = i-current+1;

sb.delete(0, sb.length());

for(int j=current;j0){

if(result.get(0).length()0){

if(result.get(0).length()

最長的不包含重複字元的子字串

給定乙個字串求它的最長子字串是多長,比如aaa,它的最長子字串的長度是1,abca的最長子字串的長度是3 input abc output 3input aaaa output 1可以使用滑動視窗解決該題,子字串的左邊界 包含 為指標l,右邊界為指標i 包含 長度為i l 1,如何滑動視窗 有邊界移...

最長的不包含重複字元的子字串

給定乙個字串求它的最長子字串是多長,比如aaa,它的最長子字串的長度是1,abca的最長子字串的長度是3 input abc output 3input aaaa output 1可以使用滑動視窗解決該題,子字串的左邊界 包含 為指標l,右邊界為指標i 包含 長度為i l 1,如何滑動視窗 有邊界移...

c 求字串內無重複字元的最長子串

int lengthoflongestsubstring char s if isok else i i count 1 count 0 return longlenth int lengthoflongestsubstring char s if isok else count i start 1...