如何按频率顺序查找最长的子字符串
本文关键字:字符串 查找 何按 频率 顺序 | 更新日期: 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 in
比the paragraph
长,但the paragraph
重复两次,所以列在第一位。
更新(基于AlexC和MattBurland的观察):
即使子字符串(如空格字符或in
)比其他子字符串出现得更多,如果它们已包含在长于其出现次数 * 长度的子字符串中,则不应列出它们。 例如,in
出现 3 次,长度为 6 个字符(末尾有 9 个字符包括空格),但由于 9 个字符比 the paragraph
短,因此未列出。 我希望这是有道理的?
是的,就像其他人说的那样,如果您从提供的示例中提取子字符串并修剪空格,您将获得如下所示的字符串数组:
string[] myArray = {"the" , "longest", ....等
现在,您可以做的是循环到数组中删除相似的字符串,同时增加它们的出现次数。然后,将此信息添加到列表中。
然后再次循环以按长度对它们进行排序。但是,在最后,列表中的字符串不能是单词的组合,除非输入字符串最初由空格以外的其他东西分隔,例如 $ 符号。
"本段中最长的字符串$is不是$the段$中的最短字符串,因为它是$the段中最长的字符串"
如果是这种情况,您只需执行与上述完全相同的过程,但用 $ 符号而不是空格分隔子字符串。