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

Posted 大忽悠爱忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

在这里插入图片描述

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


滑动窗口

思路:

  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的滑动区间长度

代码:

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;
	}
};

在这里插入图片描述

以上是关于leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:38.哪种连续子字符串更长

Leetcode5763. 哪种连续子字符串更长

单周赛 242 题解

LeetCode523. 连续的子数组和/394. 字符串解码/牛客:万万没想到之抓捕孔连顺

Leetcode.1849 将字符串拆分为递减的连续值

LeetCode 2024 考试的最大困扰度[滑动窗口] HERODING的LeetCode之路