给定的字符串可以是数字和字母的混合。在本文中,我们需要找到同时包含字母和数字的最大子字符串。
正则表达式模块可用于查找所有具有数字或字母的连续子字符串。然后,我们应用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')
这是一种直接但缓慢的方法,我们设计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')