检查字符串是否具有相同频率的所有字符,并且 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