如何按频率顺序查找最长的子字符串

本文关键字:字符串 查找 何按 频率 顺序 | 更新日期: 2023-09-27 18:31:22

最好

用一个例子来描述。 鉴于该段:

The longest string in this paragraph is not the shortest string in the paragraph because it is the longest string in the paragraph

我想先按频率然后按长度列出匹配子字符串的顺序,所以在这种情况下,它应该列出(不区分大小写)

  • The longest string in
  • the paragraph
  • is not the shortest string in
  • because
  • it is
  • this

上面按子串出现的频率顺序列出了子串,后跟长度,因此The longest string in重复两次,是最长的子串。 is not the shortest string inthe paragraph长,但the paragraph重复两次,所以列在第一位。

更新(基于AlexC和MattBurland的观察):

即使子字符串(如空格字符或in)比其他子字符串出现得更多,如果它们已包含在长于其出现次数 * 长度的子字符串中,则不应列出它们。 例如,in出现 3 次,长度为 6 个字符(末尾有 9 个字符包括空格),但由于 9 个字符比 the paragraph 短,因此未列出。 我希望这是有道理的?

如何按频率顺序查找最长的子字符串

是的,就像其他人说的那样,如果您从提供的示例中提取子字符串并修剪空格,您将获得如下所示的字符串数组:

string[] myArray = {"the" , "longest", ....等

现在,您可以做的是循环到数组中删除相似的字符串,同时增加它们的出现次数。然后,将此信息添加到列表中。

然后再次循环以按长度对它们进行排序。但是,在最后,列表中的字符串不能是单词的组合,除非输入字符串最初由空格以外的其他东西分隔,例如 $ 符号。

"本段中最长的字符串$is不是$the段$中的最短字符串,因为它是$the段中最长的字符串"

如果是这种情况,您只需执行与上述完全相同的过程,但用 $ 符号而不是空格分隔子字符串。