📜  门|门CS 2008 |第 78 题(1)

📅  最后修改于: 2023-12-03 14:58:36.844000             🧑  作者: Mango

题目介绍

这是门|门CS 2008年的第78题,是一道经典的编程题目,考察的是程序员的逻辑思维能力和编码技巧。题目要求写一个程序,以识别一个给定的字符串是否符合指定的规则。这道题需要你掌握字符串匹配的基本算法和字符处理方法,以及对正则表达式的了解。

题目内容

给定一个长为n的字符串s,判断该字符串是否符合以下规则:

  • s必须由大小写英文字母构成;
  • s中不能有连续3个及以上的相同字符;
  • s不能以数字0开头;

如果字符串s符合以上所有规则,则输出"Valid",否则输出"Invalid"。

题目解析

这道题目需要我们按照题目规定依次进行三项判断。第一项判断比较简单,只需要使用正则表达式即可。

第二项判断要求我们检查字符串中是否有连续三个及以上的相同字符,这就需要我们用到一些字符处理的技巧。我们可以用一个计数器来记录当前字符出现的次数,如果与前一个字符相同,则计数器+1,否则计数器重置为1。当计数器达到3时,说明出现了三个及以上相同字符,字符串就不符合规则。

第三项判断是检查字符串是否以数字0开头,也很简单。只需要检查字符串的第一个字符是否为'0'就可以了。

最后,我们将三项判断的结果合并,如果全部符合,则输出"Valid";否则输出"Invalid"。

代码实现

下面是Python实现代码片段:

import re

def isValid(s: str) -> str:
    # 判断第一项规则
    if not re.match("^[a-zA-Z]+$", s):
        return "Invalid"
    
    # 判断第二项规则
    count = 1
    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            count += 1
            if count == 3:
                return "Invalid"
        else:
            count = 1
    
    # 判断第三项规则
    if s.startswith("0"):
        return "Invalid"
    
    return "Valid"

这段代码首先使用正则表达式判断字符串s是否只包含大小写英文字母。如果不是,则返回"Invalid"。

然后使用循环遍历字符串s,用计数器count记录当前字符出现的次数。如果当前字符与前一个字符相同,则计数器+1,否则计数器重置为1。如果计数器达到3,则说明出现了三个及以上相同字符,返回"Invalid"。

最后判断字符串s是否以'0'开头,如果是,则返回"Invalid",否则返回"Valid"。

注:本文的解题思路与代码仅供参考,读者需要根据自己的理解和实际情况进行修改和优化。