Given a string, find the length of the longest substring without repeating characters.
方法1:时间复杂度为O(n^2)
这种方法也是最为简单的
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len=s.length();
bool *arr=(bool*)malloc(256);
memset(arr,0,256);
int maxlen=0;
int tmp=0;
int i,j;
for(i=0;i<len;++i)
{
for(j=i;j<len;++j)
{
if(j==i)
{
memset(arr,0,256);
tmp=0;
}
if(arr[s[j]]==0)
{
tmp++;
arr[s[j]]=1;
}
else
break;
}
if(tmp>maxlen)
maxlen=tmp;
if(j==len)
break;
}
free(arr);
return maxlen;
}
};
方法2:这种方法利用前面检测到的重复字符的信息
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.length();
int begin,end,now,max_length,flag;
begin=0;
if(n==0)
max_length=0;
else
max_length=1;
for(end=1;end<n;end++)
{
flag=0;
for(now=begin;now<end;now++)
{
if(s[now]==s[end])
{
max_length=max(max_length,end-begin);
begin=now+1;
flag=1;
break;
}
}
if(flag==0)
{
max_length=max(max_length,end-begin+1);
}
}
return max_length;
}
};