题意:求一个字符串的最长不含重复字符的子字符串长度;数组
示例: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; }