欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

怕npy的牛牛(双指针)

程序员文章站 2022-03-05 09:35:35
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阿明),一起加油、一起学习进步!
怕npy的牛牛(双指针)

本文地址:https://blog.csdn.net/qq_21201267/article/details/110452181

相关标签: LintCode及其他OJ