检查字符串是否具有相同频率的所有字符,并且 Python 中允许一种变体
假设我们有一个小写字符串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