インタビューの質問01.05。一度編集
操作を編集する3つの文字列があります。文字を挿入するか、文字を置換する文字を削除します。2つの文字列を考えると、彼らは関数を記述するだけで1つ(またはゼロ)エディタが必要かどうかを決定します。
例1:
入力:
まず= "ペール"
SECOND、= "PLE"
出力:真
思考
議論のポイント:
つ以上の長さの差は間違っている必要があります
LEN1 == LEN2置き換えることができます
LEN1> LEN2が削除され、LEN1 <LEN2が挿入される(すなわちseconenは最初に削除しました)
class Solution {
public:
bool oneEditAway(string first, string second) {
int len1=first.length(), len2=second.length();
if(abs(len1-len2)>1) return false; //长度差超过2
if(len1==len2) return judge(first, second, false);
if(len1>len2) return judge(first, second, true);
else return judge(second, first, true);
}
private:
bool judge(string first, string second, bool function){
// first.length >= seconed.length; function is true: delete, false:replace
bool flag=false;//记录是否已经出现不同的字符
int j=0;
for(int i=0;i<first.length();i++){
if(first[i]!=second[j]){
if(flag) return false;
flag = true;
if(function) j--;//替换的就不j--;删除才j--
}
j++;
}
return true;
}
};