leetcode 149 Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

方法1:采用简单的枚举方法。O(n^2)

<span style="font-size:18px;">#include<iostream>
#include<memory.h>
using namespace std;
int lengthOfLongestSubstring(string s)
{
	int i,j,count,max;
	bool visited[300];
	int len=s.length();
	max=0;
	for(i=0;i<len;i++)
	{
		count=0;
		memset(visited,false,sizeof(visited));
		for(j=i;j<len;j++)
		{
			if(!visited[s[j]])
			{
				visited[s[j]]=true;
				count++;
			}else
				break;
		}
		if(count>max)
			max=count;
	}
	return max;
}
int main(int argc,char *argv[])
{
	string s;
	cin>>s;
	cout<<lengthOfLongestSubstring(s)<<endl;
	return 0;
}</span><span style="font-size: 14px;">
</span>

方法2:

从左往右扫描,当遇到重复字母时,以上一个重复字母的index +1,作为新的搜索起始位置。比如



直到扫描到最后一个字母。

<span style="font-size:18px;">int lengthOfLongestSubstring(string s)
{
	int i,j,t,len,index;
	int l=0;
	int Lmax=1;
	len=s.length();
	index=0;
	while(index<len)//the start point
	{
		i=index+1;
		while(i<len)//the end point
		{
			for(j=index;j<i;j++)//from index to i
			{
				if(s[i]==s[j])//从index到i-1存在和i相同的
				{
					l=i-index;
					if(l>Lmax)
						Lmax=l;
					index=j+1;//更新下一次起始位置
					goto out;
				}
			}
			i++;
		}
		l=i-index;//从index到i-1不存在和i相同的
		if(l>Lmax)
			Lmax=l;
	out:
		if(i>=len-1)//当i遍历到末尾了,也就求出了最大长度
			break;
	}
	return Lmax;
}</span>
上面这种方法依旧超时,估计是出在对index到i的这段遍历上。明天有时间再补。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值