前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4

leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4

作者头像
大忽悠爱学习
发布2021-11-15 11:11:25
1380
发布2021-11-15 11:11:25
举报
文章被收录于专栏:c++与qt学习
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

哪种连续子字符串更长题解集合


滑动窗口

思路:

  1. 设置两个滑动窗口,一个滑动窗口内都是字符为1的,一个滑动窗口内都是字符为0的
  2. 设置两个左端指针o和z,分别记录包含字符1的滑动窗口的左端和包含字符0的滑动窗口的左端
  3. 再设置一个指针i,从字符串s的开始一直遍历到结尾,相当于两个滑动窗口的右端

具体操作过程看下方图解:

在这里插入图片描述
在这里插入图片描述

2.

在这里插入图片描述
在这里插入图片描述

首先这里第一个字符是1,因此o指针保持原位不动,而z指针要移动到当前i指针后一位,因为这里z指针指向的是包含0字符的滑动区间的左端最后一个0字符,而当前i指针指向的字符是1,即当前由z—i组成的只包含字符0的滑动区间出现了字符1,显然当前区间失效,需要重新再找新的区间只包含字符0

随后i指针往后移动一位,然后计算当前包含字符1的滑动区间的长度,与已有的包含字符1的滑动区间的最大长度进行比较,取较大者

这里不用计算包含字符0的滑动区间长度是因为指针z和指针i同时往后移动一格,那么包含字符0的滑动区间的长度是不会改变的

注意这里的滑动区间是左闭右开区间

在这里插入图片描述
在这里插入图片描述

此时的情况与上面相同,依旧是z指针先后移至i指针后一位,i指针再后移,再计算只包含字符1滑动区间长度,与之前的最大长度进行比较

在这里插入图片描述
在这里插入图片描述

此时当前i指针指向的字符是0,所以这里o指针移动到当前i指针后一个位置,然后i指针后移一位,再计算当前只包含字符0的滑动区间的长度与原有最大值进行比较

在这里插入图片描述
在这里插入图片描述

此时i指针指向的字符是1,那么z指针移动到当前i指针后一个位置,然后i指针后移一位,然后计算当前只包含字符1的滑动区间长度

代码:

代码语言:javascript
复制
class Solution {
public:
	bool checkZeroOnes(string s) 
	{
		if (s.empty()) return false;
		int o = 0, z = 0, leno = 0, lenz = 0;
		for (int i = 0; i < s.size();)
		{
			if (s[i] == '1')
			{
				z=i+1;
				i++;
				leno = max(leno, i - o);
			}
			else
			{
				o=i+1;
				i++;
				lenz = max(lenz, i - z);
			}
		}
		if (leno > lenz) return true;
		else return false;
	}
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 哪种连续子字符串更长题解集合
  • 滑动窗口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档