Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 查找任何N个字符的子字符串匹配项_String_Excel_Substring_Vba - Fatal编程技术网

String 查找任何N个字符的子字符串匹配项

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)

我有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)
        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,以此类推。