列表

详情


NC207593. 怕npy的牛牛

描述

现在有一个长度为m的只包含小写字母‘a’-‘z’的字符串x,求字符串中不同时含有n,p,y三个字母的最长字串的长度是多少?。(对于字符串”abc”来说,”c”,”ab”都是原串的子串,但”ac”不是原串子串)


输入描述

对于的数据

对于的数据

函数共有一个参数,即题目描述中的字符串x,保证字符串中字母均为小写字母
注意,所给字符串不含引号

示例1

输入:

"abcdefghijklmn"

输出:

14

说明:

因为所有子串都不同时含有n,p,y,所以最长子串的长度即为字符串x的长度14。

示例2

输入:

"ynp"

输出:

2

说明:

长度为2的字串”yn”,”np”都符合题意,不存在长度>=3的符合条件的子串。

示例3

输入:

"ypknnbpiyc"

输出:

7

说明:

“pknnbpi”为其符合条件的最长子串,长度为7。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 40ms, 内存消耗: 6436K, 提交时间: 2021-01-22 22:39:07

int a[1111];
int ok()
{
	return (a['n']>0)&&(a['p']>0)&&(a['y']>0);
}
class Solution
{
	public:
		int Maximumlength(string s)
		{
			int n=s.length(),i,j,ans=0;
			s+='0';
			j=-1;
			for(i=0;i<n;i=i+1)
			{
				while(j<n&&!ok())
				{
					j++;
					a[s[j]]++;
				}
				ans=max(ans,j-i);
				a[s[i]]--;
			}
			return ans;
		}
};

Go(1.14.4) 解法, 执行用时: 17ms, 内存消耗: 3984K, 提交时间: 2020-12-01 21:04:23

package main

// github.com/EndlessCheng/codeforces-go
func Maximumlength(s string) (ans int) {
	c := ['z'+1]int{}
	l := 0
	for r := range s {
		c[s[r]]++
		for c['n']*c['p']*c['y'] > 0 {
			c[s[l]]--
			l++
		}
		if r-l+1 > ans {
			ans = r - l + 1
		}
	}
	return
}

Python3(3.9) 解法, 执行用时: 643ms, 内存消耗: 21304K, 提交时间: 2020-12-02 11:50:35

class Solution:
  def Maximumlength(self , x ):
    return max([max([len(i) for i in x.split(j)]) for j in 'npy'])

上一题