怕npy的牛牛(双指针)
程序员文章站
2022-06-18 19:16:57
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回符合题意的最长的子串长度 * @param x string字符串 * @return int整型 */ int Maximumlength(string x) { // write code here int n = 0, p = 0, y = 0;...
1. 题目
链接:https://ac.nowcoder.com/acm/contest/9556/B
来源:牛客网
题目描述
牛牛非常怕他的女朋友,怕到了走火入魔的程度,以至于每当他看到一个字符串同时含有n,p,y三个字母他都害怕的不行。
现在有一个长度为m的只包含小写字母‘a’-‘z’的字符串x,牛牛想知道能令他不害怕的最长子串的长度是多少。(对于字符串”abc”来说,”c”,”ab”都是原串的子串,但”ac”不是原串子串)
示例1
输入
复制
"abcdefghijklmn"
返回值
复制
14
说明
因为所有子串都不同时含有n,p,y,所以最长子串的长度即为字符串x的长度14。
示例2
输入
复制
"ynp"
返回值
复制
2
说明
长度为2的字串”yn”,”np”都符合题意,不存在长度>=3的符合条件的子串。
示例3
输入
复制
"ypknnbpiyc"
返回值
复制
7
说明
“pknnbpi”为其符合条件的最长子串,长度为7。
备注:
对于40%的数据1≤m≤100
对于100%100%的数据1≤m≤1000000
函数共有一个参数,即题目描述中的字符串x,保证字符串中字母均为小写字母
注意,所给字符串不含引号
2. 解题
- 双指针解题
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回符合题意的最长的子串长度
* @param x string字符串
* @return int整型
*/
int Maximumlength(string x) {
// write code here
int n = 0, p = 0, y = 0;
int ans = 0;
for(int i = 0, j = 0; j < x.size(); ++j)
{
if(x[j]=='n') n++;
else if(x[j]=='p') p++;
else if(x[j]=='y') y++;
while((n>0 && p>0 && y>0))
{
if(x[i]=='n') n--;
else if(x[i]=='p') p--;
else if(x[i]=='y') y--;
i++;
}
ans = max(ans, j-i+1);
}
return ans;
}
};
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
本文地址:https://blog.csdn.net/qq_21201267/article/details/110452181
上一篇: HTML5 知识点总结(六)