思路:
1.value說明:
Integer.valueof函數(shù)得到字符的ASCII碼值
2.hash[]說明:
hash[value]的值是第i個(gè)字符最近一次出現(xiàn)的(在字符串中)下標(biāo)+1垄提。
比如'a'這個(gè)字符最近一次出現(xiàn)在下標(biāo)為3的位置處(abcabcbb)巷挥,那么hash[value]存儲(chǔ)的是4
hash[]通過不斷更新遇到的字符的下標(biāo)信息來表示字符是否出現(xiàn)過 或 是否在當(dāng)前窗口內(nèi)
java實(shí)現(xiàn):
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] chs=s.toCharArray();
int[] hash=new int[128];
int left=0;
int maxlen=0;
for(int i=0;i<chs.length;i++) {
int value=Integer.valueOf(chs[i]);//得到ASCII碼
if(hash[value]==0 || hash[value]<left) {//當(dāng)前字符未出現(xiàn)過 or 當(dāng)前字符的位置不在窗口中
maxlen=Math.max(maxlen, i-left+1);
}else {
left=hash[value];
}
hash[value]=i+1;
}
return maxlen;
}
}
題目鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/