One Edit Distance

本文详细阐述了如何实现一个编辑距离为一的操作函数,通过比较两个字符串并判断它们之间的编辑距离是否为一来确定它们是否仅需一次插入、删除或替换操作即可变为彼此。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Implement a function OneEditApart with the following signature:
bool OneEditApart(string s1, string s2)

isOneEditDistance("cat", "dog") = false
isOneEditDistance("cat", "cats") = true
isOneEditDistance("cat", "cut") = true
isOneEditDistance("cat", "cast") = true
isOneEditDistance("cat", "at") = true
isOneEditDistance("cat", "acts") = false

Edit is: insertion, removal, replacement


bool isOneEditDistance(string s, string t) {
int len_s = s.size(), len_t = t.size();
int size_dif = abs(len_s - len_t);
if(size_dif > 1) return false;
int dif = 0, max_s = max(len_s, len_t);
auto shorter = s.c_str(), longer = t.c_str();
if(s.size() > t.size()) swap(shorter, longer);
for(int i = 0; i < max_s; ++i) {
if(shorter[i - (size_dif == 0 ? 0 : dif)] == longer[i]) continue;
if(++dif > 1) return false;
}
return dif == 1;
}

另一种简单的解法

1
2
3
4
5
6
7
8
bool isOneEditDistance(string s, string t) {
for (int i = 0; i < min(s.size(), t.size()); i++) {
if (s[i] == t[i]) continue;
return s.substr(i + (s.size() >= t.size() ? 1 : 0)) ==
t.substr(i + (s.size() <= t.size() ? 1 : 0)));
}
return abs<int>(s.size() - t.size()) == 1;
}


转自:http://www.fgdsb.com/tags/Array/page/3/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值