我试图想出一种方法来比较两个字符串并返回它们的“常用”字,假设字符串总是小写,我想为此创建一个函数。例如
str1 = "this is a test"
str2 = "saldkasl test asdasd"
result = stringcompare(str1, str2) 'returns "test"
两个字符串之间的常用词应该是“测试” 如果两个字符串有两个或多个常用字,则该函数应该连接字符串
str1 = "this is another test"
str2 = "another asdsada test asdsa"
result = stringcompare(str1, str2) ' returns "another test"
我找到了一个有用的link,它给了我一个想法,但不知何故有些东西真的缺乏
我现在正在做的伪代码就是这个,
**
'1st: separate the words by every space, " ", then store it in an array or list
'2nd: compare each item on the list, if equal then store to variable 'result'
**
这没关系吗?我认为这很慢,也许有人在这方面有更好的方法......谢谢
答案 0 :(得分:2)
根据VS 2013测量,以下解决方案平均比Guffa快20%:
Dim str1 As String = "this is another test"
Dim str2 As String = "another asdsada test asdsa"
Dim result As String = String.Join(" ", str1.Split(" "c).
Intersect(str2.Split(" "c)))
通过将每个溶液循环100000次并使用StopWatch测量时间来获得结果。
答案 1 :(得分:1)
对第一个字符串中的单词使用哈希集,然后您可以遍历第二个字符串中的单词并检查它们是否存在于第一个字符串中,并接近O(n)性能:
Dim first As New HashSet(Of String)(str1.Split(" "c))
Dim result As String() = str2.Split(" "c).Where(Function(s) first.Contains(s)).ToArray()