leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4
Posted 大忽悠爱忽悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 1869. 哪种连续子字符串更长---滑动窗口篇3,双指针篇4相关的知识,希望对你有一定的参考价值。
哪种连续子字符串更长题解集合
滑动窗口
思路:
- 设置两个滑动窗口,一个滑动窗口内都是字符为1的,一个滑动窗口内都是字符为0的
- 设置两个左端指针o和z,分别记录包含字符1的滑动窗口的左端和包含字符0的滑动窗口的左端
- 再设置一个指针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的主要内容,如果未能解决你的问题,请参考以下文章