題目:
字符串有三種編輯操作:插入一個(gè)英文字符、刪除一個(gè)英文字符或者替換一個(gè)英文字符。 給定兩個(gè)字符串,編寫一個(gè)函數(shù)判定它們是否只需要一次(或者零次)編輯。
輸入:?
first = "pale"
second = "ple"
輸出: True
解題思路:
本題可以分為以下幾種情況來(lái)處理:
1.兩個(gè)字符串長(zhǎng)度相差=1,那么只需要判斷哪個(gè)字符串更長(zhǎng),再判斷將短字符串插入一個(gè)字符串后,是否符合條件
2.兩個(gè)字符串長(zhǎng)度相等,那么只能進(jìn)行替換,不能插入
3.兩個(gè)字符串長(zhǎng)度相差>1,那么一次編輯是無(wú)法使兩個(gè)字符串相等的,直接返回false即可文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-636783.html
源代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636783.html
class Solution {
public:
bool oneEditAway(string first, string second) {
int len1=first.size();
int len2=second.size();
//第一個(gè)字符串比第二個(gè)字符串長(zhǎng)度多1個(gè)字符
if(len1-len2==1)
{
//給第二個(gè)字符串插入一個(gè)字符,判斷是否跟第一個(gè)字符串相等
return insert(first,second);
}
//第二個(gè)字符串比第一個(gè)字符串長(zhǎng)度多1個(gè)字符
else if(len2-len1==1)
{
//給第一個(gè)字符串插入一個(gè)字符,判斷是否跟第二個(gè)字符串相等
return insert(second,first);
}
//兩個(gè)字符串長(zhǎng)度相等,那么只能通過(guò)替換實(shí)現(xiàn),不能進(jìn)行插入
else if(len1==len2)
{
return replace(first,second);
}
//剩下的情況:兩個(gè)字符串長(zhǎng)度相差大于1,不能只通過(guò)一次編輯實(shí)現(xiàn)
else
{
return false;
}
}
//插入函數(shù)
bool insert(string Long, string Short)
{
int i,j=0;
while(i<Long.size()&&j<Short.size())
{
//如果兩個(gè)字符相等
if(Long[i]==Short[j])
{
//短字符下標(biāo)繼續(xù)走
j++;
}
i++;
//當(dāng)下標(biāo)i和j差值大于1時(shí),說(shuō)明 不止需要插入一個(gè)字符
if(i-j>1) return false;
}
return true;
}
//替換函數(shù)
bool replace(string first, string second)
{
int i=0;
int flag=0;//標(biāo)記是否已經(jīng)覆蓋過(guò)
while(i<first.size())
{
if(first[i]!=second[i])
{
//如果兩個(gè)字符不相等的同時(shí),flag還大于0,說(shuō)明前面已經(jīng)替換過(guò)一次了,直接返回false
if(flag>0)
{
return false;
}
//若能替換,則flag++
flag++;
}
i++;
}
return true;
}
};
到了這里,關(guān)于leetcode原題 一次編輯(判定字符串是否只需要一次(或者零次)編輯)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!