假设我们有一个字符串 s。我们必须找到 s 的最长好的子串。对于字符串 s,如果对于 s 中的每个字母,它都以大写和小写形式出现,则可以说它很好。如果有多个这样的子串,则返回最早出现的子串。
因此,如果输入类似于 s = "ZbybBbz",那么输出将是 "bBb",因为它包含小写和大写的 B。
为了解决这个问题,我们将按照以下步骤操作 -
cur_max:= -1
res:= 空字符串
对于范围 0 到 s 大小的 i,请执行
c := s[j]
如果 c 是小写,则
如果 c 是大写的,那么
如果上与下相同,则
将 c 添加到下层
将 c 添加到大写但在将其转换为小写之前
cur_max := ji
res := s的子串[从索引i到j+1]
如果 ji > cur_max,则
将 c 添加到大写但在将其转换为小写之前
将 c 添加到下层
c := s[i]
上:=一个新的集合
下 := 一个新的集合
如果 c 是小写,则
如果 c 是大写的,那么
对于在 i+1 到 s 大小的范围内的 j,请执行
返回资源
让我们看看以下实现以获得更好的理解 -
def solve(s): cur_max= -1 res="" for i in range(len(s)): c = s[i] upper = set() lower = set() if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) for j in range(i+1,len(s)): c = s[j] if c.islower(): lower.add(c) if c.isupper(): upper.add(c.lower()) if upper == lower: if j-i>cur_max: cur_max = j-i res = s[i:j+1] return res s = "ZbybBbz" print(solve(s))
"ZbybBbz"输出结果
bBb