在Python中查找最长的连续字母和数字子字符串

给定的字符串可以是数字和字母的混合。在本文中,我们需要找到同时包含字母和数字的最大子字符串。

带重新模块

正则表达式模块可用于查找所有具有数字或字母的连续子字符串。然后,我们应用max函数仅选择在所有找到的子字符串中具有最大长度的字母和数字的连续子字符串。findall函数还用于标识和获取所需的子字符串。

示例

import re

def longSubstring(str):
   letter = max(re.findall(r'\D+', str), key=len)
   digit = max(re.findall(r'\d+', str), key=len)

   return letter, digit

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

输出结果

运行上面的代码给我们以下结果-

(' Congratulations! ', '459')

使用len()和While循环

这是一种直接但缓慢的方法,我们设计while循环来检查给定字符串中作为子字符串出现的数字和字母的长度。然后,我们比较它们的长度,并仅选择最大长度的子串。

示例

def longSubstring(s):
   max_letterSeq = ''
   max_digitSeq = ''
   i = 0
   while (i < len(s)):

      current_letterSeq = ''
      current_digitSeq = ''

      # Letters
      while (i < len(s) and s[i].isalpha()):
         current_letterSeq += s[i]
         i += 1

      # Digits
      while (i < len(s) and s[i].isdigit()):
         current_digitSeq += s[i]
         i += 1

      # Check if not digit or alphabet
      if (i < len(s) and not (s[i].isdigit())
            and not (s[i].isalpha())):
         i += 1

      if (len(current_letterSeq) > len(max_letterSeq)):
         max_letterSeq = current_letterSeq

      if (len(current_digitSeq) > len(max_digitSeq)):
         max_digitSeq = current_digitSeq

   return max_letterSeq, max_digitSeq

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

输出结果

运行上面的代码给我们以下结果-

('Congratulations', '459')