インタビューの質問01.05。一度編集

インタビューの質問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;
    }
};

 

公開された150元の記事 ウォン称賛23 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_38603360/article/details/104340926