Problem: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.
题目:给定一个字符串,找出最长无重复字符的子串。
思路:用ASCII码作为下标记录字符再目前子串中是否出现过,出现则更新子串起始位,重新计算子串。
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int len=s.length();
if(len==0)
return 0;
int ret = 0;
int[] temp = new int[127];
temp[Integer.valueOf(s.charAt(0))]=-1;
int flag=0;int count=1;
for(int i=1;i<len;i++){
int n = Integer.valueOf(s.charAt(i));
if(temp[n]!=0){
if(count>=ret){
ret=count;
}
if(temp[n]==-1){
flag=temp[n]+2;
i=temp[n]+2;
}
else{
flag=temp[n]+1;
i=temp[n]+1;
}
count=0;
System.arraycopy(new int[127], 0, temp, 0, 127);
}
count++;
temp[Integer.valueOf(s.charAt(i))]=i;
//System.out.println("i:"+i+" count:"+count);
}
if(count>ret)
ret=count;
return ret;
}
}
很遗憾,此solution的效率只打败28%左右的解答。