在Python中查找最长连续递增子串的长度

在Python中查找最长连续递增子串的长度

假设我们有一个小写字符串s。它包含英文字母以及“?”符号。对于每个“?”符号,我们必须删除它或将其替换为任何小写字母。我们必须找到以字母“a”开头的最长连续递增子串的长度。

因此,如果输入为s =“vta???defke”,那么输出将为6,因为我们可以将s转换为“vtabcdefke”,“abcdef”是最长的连续递增子串,也以“a”开头。

解决此问题,我们将遵循以下步骤 –

  • maxlen:= 0
  • 长度 := 0
  • qmarks:= 0
  • 对于s中的每个c,执行以下操作
    • 如果c与“?”相同,则
      • qmarks:= qmarks + 1
    • 否则,
      • idx:=(c的ASCII码) – (“a”的ASCII码)
      • 如果长度≤idx≤长度+ qmarks或idx≤qmarks,则长度: = idx + 1,否则为0
      • qmarks := 0
    • maxlen := maxlen和(长度+ qmarks和26的最小值)的最大值
  • 返回maxlen

示例

让我们看一下以下实现,以便更好地理解 –

def solve(s):
 maxlen = length = qmarks = 0
 for c in s:
    if c == "?":
       qmarks += 1
    else:
       idx = ord(c) - ord("a")
       length = idx + 1 if length <= idx <= length + qmarks or idx <= qmarks else 0
       qmarks = 0
 maxlen = max(maxlen, min(length + qmarks, 26))
 return maxlen

s = "vta???defke"
print(solve(s))

输入

"vta???defke"

输出

6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程