Python 程序:查找按顺序排列的所有元音的最长子字符串


假设我们有一个字符串 s,其中只包含英文元音,我们需要找到 s 的最长美丽子字符串的长度。如果找不到这样的子字符串,则返回 0。如果一个字符串满足以下条件,则称其为美丽的:

  • 它必须包含所有 5 个元音至少一次。

  • 字母必须按字母顺序排序。

因此,如果输入类似于 s = "aaioaaaaeiiouuooaauu",则输出将为 10,因为子字符串 "aaaaeiiouu" 是美丽的。

为了解决这个问题,我们将遵循以下步骤:

  • vowels := 所有元音的列表 ['a', 'e', 'i', 'o', 'u']

  • l := 0, r := 0, longest := 0

  • 当 l < s 的大小,执行以下操作:

    • valid := True

    • 对于 vowels 中的每个元音,执行以下操作:

      • valid := valid 为真并且 (r < s 的大小且 s[r] 与元音相同)

      • 当 r < s 的大小且 s[r] 与元音相同,执行以下操作:

        • r := r + 1

    • 如果 valid 为真,则:

      • longest := longest 和 (r - l) 中的最大值

    • l := r

  • 返回 longest

示例

让我们看看以下实现以获得更好的理解:

def solve(s):
   vowels = ['a', 'e', 'i', 'o', 'u']
   l, r, longest = 0, 0, 0
   while (l < len(s)):
      valid = True
      for vowel in vowels:
         valid &= (r < len(s) and s[r] == vowel)
         while (r < len(s) and s[r] == vowel):
            r += 1
      if (valid):
         longest = max(longest, r - l)
      l = r
   return longest

s = "aaioaaaaeiiouuooaauu"
print(solve(s))

输入

"aaioaaaaeiiouuooaauu"

输出

10

更新于: 2021 年 10 月 7 日

546 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告