Python 将修改输入字符串以使其等化字符频率

Python 将修改输入字符串以使其等化字符频率

Python包含许多内置函数,旨在执行各种操作,包括字符串操作、数组分析、代数推理等。Python中的字符串是一种数据类型,其中字符按顺序排列。这些字符被索引以获得序列中的特定位置,我们可以利用这些索引值来启动基本的字符串操作。本文将详细介绍一种类似的基于字符串的操作,我们将修改输入字符串以使其 等化 字符频率。

理解问题

我们的任务是以一种方式修改字符串,使得每个字符具有相等的频率或出现次数。在字符串中,每个字符可能具有不同的频率,因此它们应该进行相应的调整。让我们通过一个示例来理解这个问题。

输入输出场景

让我们考虑一个字符串−

Input: "thisisateststring"

在这里,最常出现的字符是“ t ”,出现频率为“ 4 ”。我们需要以一种方式操作字符串,使得原始字符串中的每个字符的频率都是“ 4 ”。因此,输出将是−

Output: thisisateststringhhhiaaaeeerrrnnnggg

既然我们已经了解了问题,让我们讨论一些有效的解决方案。

使用循环(迭代)和count()函数

我们将运行一个函数并输入一个字符串。我们将通过“ count() ”方法迭代遍历这个字符串,并计算每个字母的频率。

count() 方法返回一个整数值。我们将获得最大字符计数值和最大出现的字母,通过建立一个检查当前计数的条件。一旦我们获得了这些值,我们将使用另一个迭代来遍历原始字符串,并分离那些计数不等于 最大计数值 的字母。

这些被隔离的字母将被添加到一个新的字符串中,以使每个字母具有相同的频率。通过这种方式,将创建一个具有 相同字符频率 的新字符串。

示例

以下是一个等化字符频率的示例:

def INP_str(str):
   print(f"The original string is {str}")
   max_count = 0
   max_letter = ''

   for x in str:
      count = str.count(x)
      if count > max_count:
         max_count = count
         max_letter = x

   print(f"The maximum occurring letter is {max_letter}")
   print(f"The maximum frequency is {max_count}")

   # matching the frequencies 
   newSTR = str
   for i in str:
      if newSTR.count(i) != max_count:
         newSTR += i * (max_count - str.count(i))

   print(f"New string with equal character frequency:{newSTR}")

INP_str("thisisateststring")

输出

The original string is thisisateststring
The maximum occurring letter is t
The maximum frequency is 4
New string with equal character frequency:thisisateststringhhhiaaaeeerrrnnnggg

使用集合模块中的Counter()

这种方法的基本原理是找出最大字符计数和最大出现的字母。不同之处在于隔离这些参数的技术。我们将使用’Counter’类的实例来计算可哈希对象(在本例中为字符串)并将它们存储为键值对的形式。在这里,唯一的字符被存储为键,它们的频率被存储为字典的值。

这种方法允许我们根据字符计数执行更高级的操作。一旦我们获得了最大频率,我们将按照相同的过程附加不相等的字母。

示例

以下是一个示例-

from collections import Counter

def INPstr(input_str):
   refStr = Counter(input_str)
   max_count = 0
   max_letter = ""

   for char, count in refStr.items():
      if count > max_count:
         max_count = count
         max_letter = char

   print(f"The maximum occurring letter is {max_letter}")
   print(f"The maximum frequency is {max_count}")

   newSTR = input_str
   for i in input_str:
      if newSTR.count(i) != max_count:
         newSTR += i * (max_count - input_str.count(i))

   print(f"New string with equal character frequency:{newSTR}")


INPstr("thisisateststring")

输出

The maximum occurring letter is t
The maximum frequency is 4
New string with equal character frequency:thisisateststringhhhiaaaeeerrrnnnggg

附加逻辑

字母的频率不应超过最大频率值。我们通过实施条件来捍卫这个逻辑,该条件检查每个字母的计数,然后只附加那些频率与最大频率不匹配的字母。每个字符与该字符的当前计数和最大频率值之间的差异相乘,然后附加到原始字符串中。

结论

在本文的过程中,我们讨论了在字符串中平衡字符频率的不同解决方案。在第一种解决方案中,我们使用了“count()”方法和迭代。第二种方法与核心技术没有太大的偏差,它使用了“Counter()”方法和迭代。我们还讨论了附加技术,以捍卫频率平衡的逻辑。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程