leetcode 3 :无重复字符的最长子串

leetcode 3 :无重复字符的最长子串

1. 题目

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

2. 示例:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

3. 自己的解决方法

int lengthOfLongestSubstring(char * s){
	
}

4. 标准答案

int lengthOfLongestSubstring(char * s)
{
	int iLoop;              /*    计数器    */
	int subStrLen = 0;      /* 子串当前长度 */
	int subStrMax = 0;      /* 子串最大长度 */
	int subStrStart = 0;    /* 子串起始位置 */
	int index[128] = {0};   /* 记录每个字符先后出现位置 */
	
	for(iLoop = 0; s[iLoop] != '\0'; iLoop++){
		//printf("iLoop = %d\n", iLoop);
		
		/* 若为真,则说明字符 s[iLoop] 如 s[3]=a 在之前重复出现过 */
		if(index[s[iLoop]] > subStrStart){ 
		
			/* 记录此时子串的长度 如 开始 abca 长度=3-0=3*/
			subStrLen = iLoop - subStrStart; 
			
			 /* 更新max */
			if(subStrLen > subStrMax){
				subStrMax = subStrLen;
			}
			
			/* 更新新子串的起始位置 */
			subStrStart = index[s[iLoop]]; 
			//printf("subStrStart = %d\n",subStrStart);
		}
		
		/* 记录字符 s[iLoop] 在整个字符串中出现的位置 */
		index[s[iLoop]] = iLoop + 1; 
	}
	
	subStrLen = iLoop - subStrStart; /* 计算最后一个子串的长度 */
	return subStrLen > subStrMax ? subStrLen : subStrMax;
}

/*
					a b c a b c b b 
iLoop 				0 1 2 3 4 5 6 7
index[s[iLoop]] = 	1 2 3 4 5 6 7 8 	
subStrStart		 	0 0 0 1 2 3 5 7
*/

参考: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/cyu-yan-shuang-yi-bai-by-wu-sheng-23/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值