207 小R的单词构造策略 题解 | 豆包MarsCode AI刷题

98 阅读2分钟

问题描述

小R希望用给定字符串中的字符构造一个最长的合法单词。合法单词的要求是:不能有两个相邻的辅音字母,并且元音字母仅限于 "a", "e", "i", "o", "u"。你的任务是帮助小R找出她能构造出的最大合法单词的长度。

题目分析

题目要求构造一个最长的合法单词,合法单词的条件是不能有两个相邻的辅音字母,且元音字母仅限于 'a', 'e', 'i', 'o', 'u'。可以通过以下逻辑求解:

  1. 元音和辅音的计数:首先,需要区分字符串中的元音和辅音字符。元音字符包括 'a', 'e', 'i', 'o', 'u',其余的字符为辅音。

  2. 构建合法单词的规则

    由于合法单词中不能有两个相邻的辅音字母。因此,合法的单词构造模式可以总结为:元音-辅音-元音...,辅音-元音-辅音... 或者 仅元音。

    这意味着辅音的数量最多只能比元音的数量多一个(以辅音开头和结尾),或者等于或少于元音的数量(以元音开头和结尾)。

  3. 计算最大合法单词的长度

    • 如果元音数量大于等于辅音数量,那么所有的辅音都可以在两个元音之间出现,形成最长的合法单词,其长度为 vowel_count + consonant_count

    • 如果辅音数量大于元音数量,那么只能将元音和尽量多的辅音交替放置,开头第一个位置和最后一个位置必须是辅音,以形成最长的合法单词。此时,合法单词的长度为 2 * vowel_count + 1(元音的数量为vowel_count,可以理解为两个辅音之间放置一个元音,那么辅音数量最多为vowel_count + 1)。

代码实现

以下为python语言的实现代码,如有需要可以参考。

def solution(s: str) -> int:
    vowels = {'a', 'e', 'i', 'o', 'u'}
    vowel_count = 0
    consonant_count = 0
    result = 0
    
     # 统计元音和辅音的数量
    for char in s:
        if char in vowels:
            vowel_count += 1
        else:
            consonant_count += 1
    
    # 根据辅音和元音的数量计算最长合法单词的长度
    if consonant_count <= vowel_count:
        result = consonant_count + vowel_count
    else:
        result = 2 * vowel_count + 1

    return result

总结

本题主要考察了字符串处理和规则匹配的能力。通过统计元音和辅音的数量,并根据合法单词的规则进行计算,可以得出最长合法单词的长度。这个问题不仅考察了基本的编程技能,还涉及到了对规则的理解和应用。通过仔细分析和推理,才可以得出正确的解决方案。