无重复字符最长字串的长度

1、题目说明

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例
输入输出说明
“abcade”5无重复字符最长子串为“bcade”,所以输出为5
“aaaaa”1无重复字符最长子串为“a“,所以输出为1
”qwwer“3无重复字符最长子串为”wer“,所以输出为3

2、分析

根据示例我们可以看出,题目需要我们找出字符串中无重复字符且连续的一段最长子串的长度。

思路:①设置两个下标move_index和start_index,起始位置都为0;

                  ②move_index++,循环比较move_index下标及其之前子字符串中是否存在相同字符;

                  ③若不存在,那么start_index就始终为0;

                  ④若存在,那么start_index就指向相同字符的下一个位置;

示例:string s = “abcadf”;其中表示move_index的位置,表示start_index的位置。

次数\下标012345

长度

(下标相减+1)

第一次

a

     0-0+1 = 1
第二次ab    1-0+1 = 2
第三次abc   2-0+1 = 3
第四次 bca  3-1+1 = 3
第五次 bcad 4-1+1 = 4
第六次 bcadf5-1+1 = 5

3、代码

int ReturnMaxLengthStr(string s)
{
	int start_index = 0;
	int move_index;
	int index;             
	int max_length = 0;   //最大长度

	for (move_index = 0; move_index < s.size(); ++move_index)   //循环整个字符串
	{
		//循环[start_index,move_index)之间的子字符串
		for (index = start_index; index < move_index; ++index)  
		{
			//判断是否存在字符相等的情况
			if(s[index] == s[move_index])
			{
				//若相等,则将start_move指向相同字符的下一个位置,并且break跳出本次循环
				start_index = index + 1;
				break;
			}
		}

		//比较此次子字符串的长度和max_length
		if (move_index - start_index + 1 > max_length)
		{
			max_length = move_index - start_index + 1;
		}
	}

	return max_length;
}

小弟能力有限,若有更好的方法,欢迎大家交流讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值