【发布时间】:2019-08-26 04:09:00
【问题描述】:
任何给定的子串对都具有相同的长度。必须检查许多对子字符串,因此简单的比较不够有效,但我真的想不出任何有助于加快比较过程的字符串数组的预处理。提前致谢!
举个例子说明一下:
一个长字符串数组:
str = {"aaaaa", "aaabbcc", "abcdefgh"...}
要检查的子串对:
pairs = {(str[0][0..1],str[1][1..2]), (str[0][1..4],str[2][3..6]), (str[1][2..4], str[2][0..2])...}
要检查(替换)的子串对:
pairs = {("aa","aa"), ("aaaa","defg"), ("abb","abc")...}
最终结果:
result = {true, false, true}
天真的比较会导致运行时间为O(|pairs|*max(|str[i]|)),我想改进它。
【问题讨论】:
-
你能展示一下你目前拥有的代码吗?
-
有a variety of algorithms 执行子字符串搜索比简单地比较每对子字符串更快。我建议查看一些内容以尝试确定一个可以修改以服务于您的目的的内容。它仍然会很昂贵,但 N^3 比 N^4 好。
-
@MrPromethee 除了进行简单的字符串匹配之外,我没有做太多事情。我还做了一个校验和,所以我只匹配校验和差异小于 128 (ascii) 的字符串。尽管如此,这并没有改善最坏的情况,即所有对子字符串恰好相同/不同一个字符。
-
您是否在每个长字符串中寻找匹配的子字符串?还是跨越所有长字符串?还是在他们两个之间?是否给出了子字符串的长度,即输入值?
-
@MOehm 给出一对子字符串及其各自的索引,例如 str[4] [7..25](第 7 到第 25 个字符的第 4 个字符串)和 str[9][ 0..18](第 0 到第 18 个字符的第 9 个字符串),并且提供了许多对。
标签: c string substring string-matching