題意:求一個字符串的最長不含重複字符的子字符串長度;數組
示例:spa
input:pwwkwcode
output:2blog
intput:dvdf字符串
output:3input
分析:仍是那句話,每分析一個問題的時候都要問本身,本身的大腦是如何找出正確答案的,將本身的分析轉化爲代碼此題便解string
題目要求不含重複字符,且是子字符串;it
1. 以輸入一爲例,當數到pw時,重複字符便出現了(字符串長度爲2);class
2. 因而從第二個w從新計數,到wk時,重複字符再出現(字符串長度爲2);di
3. 如此到最後一個字符,結果便爲2;
提煉出:遇到重複字符,字符長度需從新計數,最終獲得這些字符長度的最大值;
如此首先咱們須要斷定字符是否以前出現過,其次回想一下咱們是如何計數的,即當前位置-重複字符出現的那一位置+1,那麼咱們便須要記錄字符出現的位置
那麼咱們即可以使用一個數組來記錄字符出現的位置(數組下標爲字符,值爲位置index),若未出現過則值爲0
如此代碼以下:
public int lengthOfLongestSubstring(String s) { int[] site = new int[256]; int left = 0; int max = 0; for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (site[ch] == 0 || site[ch] < left) { max = Math.max(max, i - left + 1); } else { left = site[ch]; } site[ch] = i + 1; } return max; }