如何按频率顺序找到最长的子串?

时间:2012-04-17 19:49:31

标签: c#

最好用一个例子来描述。鉴于段落:

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重复两次,因此会先列出。{/ p>

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

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

1 个答案:

答案 0 :(得分:0)

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

string [] myArray = {“the”,“longest”,.... etc

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

然后再次循环以按长度排序。但是,最后,列表中的字符串不能是单词的组合,除非输入字符串首先被空格分隔,而不是像$符号那样的空格。

“$ this $ $中最长的字符串不是$ $段落中的最短字符串,因为它是$段落中最长的字符串”

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