c# - 在一组短字符串中查找非常常见的子字符串的算法

标签 c# string algorithm

我有一个来自外部数据库的大约 1500 个字符串的列表,随着时间的推移,当一组业务用户管理它们时,它们开始具有具有语义值的重复出现的子字符串。

我正在构建一个前端,并希望向用户展示这些子字符串的过滤下拉列表。

例如,如果我有输入字符串:

  • 美国富
  • 美国酒吧(无效)
  • 英国 bat
  • 英国 baz(无效)
  • 澳大利亚 womp
  • AU大鼠

我想回去:

  • 美国
  • 英国
  • 澳大利亚
  • 不活跃

我的第一个想法是拥有一个阈值参数和一个分隔符列表。对于上面的内容,我可能会说 threshold=.3 并且分隔符是空格、(, 和 )。

然后使用分隔符执行 string.split 并使用像集合这样的数据结构来计算重复项(?)...

我并不是要让某人在这里为我完成工作 - 从已经做过这件事的人那里获得有关方法的建议会很棒。

最佳答案

这个问题很适合使用 Linq 方法:

var words = from s in listOfStrings
            from word in s.Split(new[] { ' ', '(', ')' }, StringSplitOptions.RemoveEmptyEntries)
            group word by word;
var dic = words.ToDictionary(g => g.Key, g => g.Count());

关于c# - 在一组短字符串中查找非常常见的子字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757809/

相关文章:

arrays - 如何在 F# 中匹配字符串数组中的子字符串

C - 打印字符串时出现运行时错误(使用指针)

algorithm - 进行合并排序时是否有必要将索引作为参数传递?

c# - 如何以编程方式更改 DCOM 配置标识

C#动态生成HTML表格

java - 使用定界符分割字符串-Java

algorithm - 降低排序算法中的大 O 复杂度

algorithm - 如何在 3d 网格上找到连接的三角形

c# - 使用自定义 CSS 设计 Orchard 菜单

c# - 如何在记录代码中使用 IEnumerable<String>