文章目录
- 1. 题目
- 2. 解题
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 hereint 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阿明),一起加油、一起学习进步!