一个不匹配的子字符串比较
Substring comparision with one mismatch
以下是用于比较字符串a和字符串B与atmost one不匹配的代码即。,ABC与ABX、AXC或XBC相同,但与AXZ 不同
我确实查了几个案例,但网站说它提供了错误的答案。有人能帮忙找出这个代码在哪里失败吗?此外,如果有人能为同样的问题提供更好的算法,我会很高兴。
TY
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;
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;
}
一个问题是,如果b.length()
是偶数,则将a[pos + b.length() / 2]
与b[b.length() / 2]
进行两次比较:一次是在i == mid - 1
时,一次是i == mid
时。所以类似compare("abcd", 0, "abbd")
的东西返回0
,因为它计算'c'
-与-CCD_ 9差异作为两个单独的失配。
我建议您简单地去掉所有与mid
相关的逻辑。它除了使代码大量复杂化之外,没有其他用途。如果你直接从0
迭代到b.length() - 1
,你会过得更好
相关文章:
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 字符串比较中的意外输出
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- <<运算符优先级与字符串比较
- ">"运算符和"<"运算符如何进行字符串比较?
- Qt C++11 字符串通过子字符串比较列出交集
- std::out_of_range字符串比较中的异常
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 字符* 与uint8_t的字符串比较
- 用字符串 c++ 比较对向量的元素
- 使用循环进行词典字符串比较
- 如何为C++映射创建自己的字符串比较对象
- 不带比较()的字符串比较
- 与 IF 语句C++的字符串比较?
- 字符串比较在与变量一起使用时给出不同的输出
- 更快的字符串比较排序,用于唯一()
- C 字符串比较“祝您好运”&gt;“再见”
- C 奇怪的行为和字符串比较
- 子字符串与 std::memcmp 或字符串::比较的比较