检查Python字符串中所有字符是否具有相同的频率,允许一个字符频率不同


假设我们有一个小写字符串s,我们必须检查是否可以通过删除最多一个字符将其转换为有效字符串。这里的有效字符串是指一个字符串str,其中str中所有唯一字符的每个字符的频率都相同。

因此,如果输入类似于s = "xyyzx",则输出为True,因为我们可以删除z,则字符串将变为"xyyx",其中x和y的出现次数相同。

为了解决这个问题,我们将遵循以下步骤:

  • size := 26
  • occurrence := 一个大小为26的数组。这存储了s中每个字符的频率
  • occr1 := 0
  • occr1_cnt := 0
  • 对于i从0到size - 1,执行:
    • 如果occurrence[i]不为0,则:
      • occr1 := occurrence[i]
      • occr1_cnt := 1
      • 退出循环
  • occr2 := 0
  • occr2_cnt := 0
  • 对于j从i+1到size - 1,执行:
    • 如果occurrence[j]不为0,则:
      • 如果occurrence[j]等于occr1,则:
        • occr1_cnt := occr1_cnt + 1
      • 否则:
        • occr2_cnt := 1
        • occr := occurrence[j]
        • 退出循环
  • 对于k从j+1到size - 1,执行:
    • 如果occurrence[k]不为0,则:
      • 如果occurrence[k]等于occr1,则:
        • occr1_cnt := occr1_cnt + 1
      • 如果occurrence[k]等于occr2,则:
        • occr2_cnt := occr2_cnt + 1
      • 否则:
        • 返回False
    • 如果occr1_cnt > 1且occr2_cnt > 1,则:
      • 返回False
  • 返回True

让我们看看下面的实现,以便更好地理解:

示例

在线演示

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"

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

True

更新于:2020-12-29

143 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告