天天看点

java字符串最长的不重复子串,找出最长不重复字符的子串

public int lengthOfLongestSubstring(String s) {

if (s == null || s.length() < 1)

return 0;

HashMap map = new HashMap();

int max = 0;

for (int i = 0,j=0; i < s.length(); i++) {

if(map.containsKey(s.charAt(i))){

j=Math.max(j, map.get(s.charAt(i)+1));

}

map.put(s.charAt(i), i);

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

}

return max;

}

public int lengthOfLongestSubstring_1(String s) {

if (s == null || s.length() < 1)

return 0;

char[] arr = s.toCharArray();

Set set = new HashSet();

set.add(arr[0]);

int p1 = 0, p2 = 1;

int tempNum = 1, res = 1;

while (p2 < s.length()) {

while (set.contains(arr[p2])) {

set.remove(arr[p1++]);

tempNum--;

}

set.add(arr[p2++]);

tempNum++;

if (tempNum > res)

res = tempNum;

}

return res;

}