LeetCode 3 Longest Substring Without Repeating Characters,leetcoderepeating
分享于 点击 16028 次 点评:254
LeetCode 3 Longest Substring Without Repeating Characters,leetcoderepeating
Longest Substring Without Repeating Characters
解决思路:这个题目的大意是找到字符串中,最长的不包含重复字符的子串。
我的思路如下,首先设置两个int,end和max。分别用于记录当前不重复子串的长度以及出现过的最大的子串的长度。利用数组记录重复次数和上一次重复出现序号。
开始的时候,我利用map<char,num、index>记录重复数以及序号,效率极低。后来利用256大小的整型数组发现完全符合要求。因为256正好是所有字符的个数,直接将字符作为索引即可。
对于“dvde”这样的例子来说,还需要对重复出现的字符进行回退处理,当第二次遇到d的时候,指针回到第一个d的后面开始。从v(即为从当前重复的字符的上一次出现的序号+1)开始记录子串长度。并且,初始化次数数组和序号数组。
代码如下:
public int lengthOfLongestSubstring(String s) {
if(s.length()==0){
return 0;
}
int max =1;
int length = s.length();
//在这里没必要用hashmap 低效,直接用数组。
int []character = new int[256];//num
int []charIndex = new int[256];//index
Arrays.fill(character, 0);
Arrays.fill(charIndex, -1);
int i=0;
int end = 0;
while(i<length){
char c = s.charAt(i);
character[c]++;
int temp = character[c];
if(temp >= 2){
max = max>end?max:end;
end = 0;
i = charIndex[c]+1;
int k=0;
Arrays.fill(character, 0);
Arrays.fill(charIndex, -1);
continue;
}
charIndex[c] = i;
end++;
i++;
max = max>end?max:end;
}
return max;
}
相关文章
- 暂无相关文章
用户点评