您的位置:首页 > 其它

LeetCode Longest Substring Without Repeating Characters

2013-11-30 10:32 471 查看
bool isRepeated(string s)
{
vector<char> vec;
for (int i=0;i<s.length();i++)
{
if (vec.empty())
{
vec.push_back(s[i]);
}
else
{
vector<char>::iterator iter=vec.end();
//iter = vec.find(s[i]);vector中无find成员,用算法中的find
iter = find(vec.begin(),vec.end(),s[i]);
if(iter==vec.end())
{
vec.push_back(s[i]);
}
else
return true;
}
}
return false;
}
int lengthOfLongestSubstring(string s) {
int strlen = s.length();
int subMaxlen=0,curlen=0;
for (int i=0;i<strlen;i++)
{
for (int j=i;j<strlen;j++)
{
string substr=s.substr(i,j-i+1);
if (!isRepeated(substr))
{
curlen = j-i+1;
if (curlen>subMaxlen)
{
subMaxlen = curlen;
}
}
else
break;
}
}
return subMaxlen;
}

这是刚开始写的代码,一次提交通过,运行时间为1544ms,看别人的提交的下面这个时间为76ms,差太多了。主要是上面的方法函数调用太多了,不断地传递字串。

int lengthOfLongestSubstring(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int longest = 0;
int slen = s.length();
if(slen < 0) return 0;
if(slen == 1) return 1;
int pre = 1;
for(int i = 1; i < slen; ++i)
{
char tmp = s[i];
int j = i-1;
int count = 1;
while((j>=0) && (tmp != s[j]))
{j--;count++;}
if(count >= pre+1) count = pre+1;
if(count > longest) longest = count;
pre = count;
}
return longest;
}
下面的是自己改过的用一个函数实现的。

int lengthOfLongestSubstring2(string s)
{
int strlen = s.length();
if (strlen==0)
{
return 0;
}
int maxlen = 1;
for (int i=0;i<strlen;i++)
{
int j=i;
int flag=1;
while(flag==1)
{
int k;
for (k=i;k<j&&j<strlen;k++)
{
if (s[k]==s[j])
{
flag=0;
break;
}
}
if (flag==1)
{
if (j-i+1>maxlen)
{
maxlen=j-i+1;
}
j++;// this cannot exchange order with the above sentence
if (j==strlen)//this is necessary
{
flag=0;
break;
}
}
}

}
return maxlen;
}
运行时间为108ms,写加上调的时间快用两个小时了,好歹出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: