String 查找任何N个字符的子字符串匹配项
我有Excel工作表,其中有许多行包含任意长度和内容的未知字符串。例如:String 查找任何N个字符的子字符串匹配项,string,excel,substring,vba,String,Excel,Substring,Vba,我有Excel工作表,其中有许多行包含任意长度和内容的未知字符串。例如: str1 = "AKMDHVIIDMEHGOKDJNFJD" str2 = "DJRWFNCGNDKDJHBC" 给定最小子字符串长度N,如何确定str1中的任何N长度或更长的子字符串是否存在于str2中的任何位置 我可以用蛮力来做,比如: For N = 4 To Len(str2) For pos = 1 To Len(str2) - N subStr = Mid(str1, pos, N)
str1 = "AKMDHVIIDMEHGOKDJNFJD"
str2 = "DJRWFNCGNDKDJHBC"
给定最小子字符串长度N,如何确定str1
中的任何N长度或更长的子字符串是否存在于str2
中的任何位置
我可以用蛮力来做,比如:
For N = 4 To Len(str2)
For pos = 1 To Len(str2) - N
subStr = Mid(str1, pos, N)
If InStr(str2, subStr) > 0 Then
'Do stuff
End If
Next pos
Next N
但这种比较需要进行数千次。有没有更有效的方法?首先实现更长的子字符串的存在不是更重要吗?如果找到6个字符长的子字符串,那么也会找到5个和4个字符长的子字符串。i、 你的循环不是应该从长到短吗?@Jeeped你肯定是对的。问题中的代码是作为我可以做的一个快速示例而拼凑在一起的,但我宁愿不要求助于它。因此,我没有花太多的努力使它完美。也就是说,为了清晰起见,我会编辑这篇文章。事实上,我收回了这一点。如果找到了字符长度为4的子字符串,则应继续查找长度为5、6等的子字符串。如果未找到,请在内部循环中退出,因为如果未找到长度为4的子字符串,则将永远找不到长度为5、6等的子字符串。请阅读最长的常见子序列问题@为了尽量减少检查,您可能还希望确定外环的位置,并确定内环的长度。。。从最短字符串的位置1开始,增加字符串长度,直到在较长字符串中找不到匹配项,然后移动到位置2,以此类推。