假设我们有一个小写字符串 s,我们必须检查是否可以通过删除最多 1 个字符来将 s 转换为有效字符串。这里一个有效的字符串意味着一个字符串 str ,对于 str 中的所有唯一字符,每个字符的频率都是相同的。
因此,如果输入类似于 s = "xyyzx",那么输出将为 True,因为我们可以删除 z,然后字符串将为 "xyyx",其中 x 和 y 的出现次数相同。
为了解决这个问题,我们将按照以下步骤操作 -
大小:= 26
发生 := 大小为 26 的数组。这是存储 s 中每个字符的频率
occr1:= 0
occr1_cnt := 0
对于范围为 0 到大小 - 1 的 i,请执行
occr1 := 出现[i]
occr1_cnt := 1
从循环中出来
如果发生 [i] 不为 0,则
occr2 := 0
occr2_cnt := 0
对于 i+1 到 size - 1 范围内的 j,执行
如果发生 [j] 与 occr1 相同,则
否则,
occr1_cnt := occr1_cnt + 1
occr2_cnt := 1
occr := 出现[j]
从循环中出来
如果出现次数[j] 不为 0,则
对于 j+1 到 size - 1 范围内的 k,执行
返回错误
如果发生 [k] 与 occr1 相同,则
如果发生 [k] 与 occr2 相同,则
否则,
occr1_cnt := occr1_cnt + 1
occr2_cnt := occr2_cnt + 1
返回错误
如果出现[k] 不为0,则
如果 occr1_cnt > 1 且 occr2_cnt > 1,则
返回真
让我们看看以下实现以获得更好的理解 -
size = 26 def solve(str): occurrence = [0]*size for i in range(len(str)): occurrence[ord(str[i])-ord('a')] += 1 occr1 = 0 occr1_cnt = 0 for i in range(size): if (occurrence[i] != 0): occr1 = occurrence[i] occr1_cnt = 1 break occr2 = 0 occr2_cnt = 0 for j in range(i+1,size): if (occurrence[j] != 0): if (occurrence[j] == occr1): occr1_cnt += 1 else: occr2_cnt = 1 occr = occurrence[j] break for k in range(j+1,size): if occurrence[k] != 0: if (occurrence[k] == occr1): occr1_cnt += 1 if (occurrence[k] == occr2): occr2_cnt += 1 else: return False if occr1_cnt > 1 and occr2_cnt > 1: return False return True s = "xyyzx" print(solve(s))
"xyyzx"输出结果
True