当前位置: 首页 > 知识库问答 >
问题:

在Java中根据字母频率创建字符数组的排列

毕瀚
2023-03-14

我有一个HashMap,它以字符、整数的形式存储密文块中每个字母的频率。然后按最频繁的降序将地图排序为LinkedHashMap

然后,我将这些频率与已知的字母频率列表进行比较,以尝试猜测密码字母是什么。我遇到的问题是,如果两个或多个字母出现的次数相同。

例如,如果我们采取以下措施:

E T A O I

密码文本中最常见的5个字母是desc,然后是字母频率:

D=30 B=25 I=22 G=19 H=17

然后可以公平地假设D映射到E,因为它是最常见的,其次是B映射到T等等。

如果字母频率为:

D=30 B=25 I=22 G=22 H=22

还不清楚IG还是H应该映射到A,因为它们都是B之后最常见的。

我有点卡住了,需要一种方法,用频率列表的每个排列创建一组字符数组。需要在字符数组中输出类似的内容:

DBIGH
DBIHG
DBGIH
DBGHI
DBHIG
DBHGI

任何帮助都将不胜感激

共有1个答案

洪英豪
2023-03-14

如前所述,您需要创建字符串的每个排列IGH(这里可以同义使用字符串和字符数组)。这个问题说明了那个问题的解决办法。

要在地图中找到必须创建排列的部分,只需按其频率顺序迭代地图,并跟踪相同频率的第一次出现。

编辑:添加另一个想法来帮助你的评论。基本上,你可以将26个字符的字符串分成频率相同的组。在上面的例子中,这将是三组:DBIGH。要创建整个字符串的所有组合,需要将每个组的所有排列与所有其他组的所有排列组合在一起。对于简单的ofc单字符组。但一旦你有了更多的三人组,这将成为一个很长的列表。。。

 类似资料:
  • 问题内容: 这是来自pyschools的问题。 我确实做对了,但我猜测会有一个更简单的方法。这是最简单的方法吗? 看起来应该像这样: 问题答案: 在2.7+中: 较早的版本(2.5或更高版本,到目前为止):

  • 我有一个字符串“ECET”,我想创建所有可能的字符串,其中我用“X”替换一个或多个字母(除第一个外)。 在这种情况下,我的结果是: 关于如何处理这个问题有什么想法吗? 这不仅仅是创建“X”的可能组合/排列,还包括如何将它们与现有字符串组合。

  • 问题内容: 我有一个混合数组,需要按字母然后按数字排序 我如何将其排序为: 我努力了 但这只是按字母顺序排序。可以使用直接的JavaScript或jQuery完成此操作吗? 问题答案:

  • 我对Java相当陌生,我想打印字符串中字符的频率(“过滤”)。我将输入过滤到只剩下“az”数组中的字符的位置。在我看来,这应该行得通,但我显然做错了什么,因为我要么收到错误消息(“超出范围”),要么就是打印的值不正确。

  • 问题内容: 我有下表: 我要订购这样的产品ID(从最小到最大): 这是我尝试过的方法,但是不起作用: 我该怎么做呢? 以及如何获得最大的product_id?我试过了,但是没有用: 问题答案: 尝试执行以下查询以按预期顺序获取结果。 小提琴演示