【发布时间】:2012-02-24 00:46:00
【问题描述】:
有人可以建议一种更好的方法来比较两个最多有一个不匹配的字符串。
例子:
- 答:abcdefghabX
- B: abc
- 输出:1 9
上面的输出是abc的子串匹配在“A”中的位置
我尝试了两个 for 循环的基本方法,但它似乎需要 N*N 时间。这是大量输入的一个重要因素,并且需要大量时间。
我的算法就是这样,但它不是处理大量数据的最佳算法
int compare(string a, int pos, string b)
{
int count = 0;
int length = b.length()-1;
int mid = b.length() /2;
if(pos+length >= a.length())
return 0;
if((length+1)%2 != 0) {
for(int i=0,j=pos;i<=mid;i++,j++) {
if(i == mid) {
if(a[j] != b[i])
count ++;
}
else {
if(a[j] != b[i])
count ++;
if(a[pos+length - i] != b[length -i])
count ++;
}
if(count >= 2) return 0;
}
}
else {
for(int i=0,j=pos;i<mid;i++,j++) {
if(i == mid) {
if(a[j] != b[i])
count ++;
}
else {
if(a[j] != b[i])
count ++;
if(a[pos+length - i] != b[length -i])
count ++;
}
if(count >= 2) return 0;
}
}
return 1;
}
【问题讨论】:
标签: c++ string algorithm comparison string-comparison