题目简介
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
自己的解法
- public class Solution {
public int lengthOfLongestSubstring(String s) {
int add=0;
int count=0;
StringBuffer S=new StringBuffer(s);
while(s.length()!=1){
char a=s.charAt(0);
int i=0;
while(i!=-1){
if(i==s.length()-1){
count--;
break;
}
S.deleteCharAt(i);
i=s.indexOf(a,i+1);
}
s=S.toString();
count++;
}
return count;
}
}
我的思路是,找一个字符删掉字符串中所有与它相同的字符。count++,直到最后字符串的长度为0,返回count即可。但是在oj上始终说我deleteCharAt函数有问题,最后发现是deleteCharAt函数不能删除最后一位,但后来加上了判断还是有问题。最后还是放弃了,感觉自己还是对deleteCharAt函数不太了解。
Hot解法
- public class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length()==0) return 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
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-j+1);
}
return max;
}
}