ID photo of Ciro Santilli taken in 2013 right eyeCiro Santilli OurBigBook logoOurBigBook.com  Sponsor 中国独裁统治 China Dictatorship 新疆改造中心、六四事件、法轮功、郝海东、709大抓捕、2015巴拿马文件 邓家贵、低端人口、西藏骚乱
cpp/one_away.cpp
#include <cassert>
#include <cstdlib>
#include <string>

bool oneAway(const std::string& s1, const std::string& s2) {
    bool used = false;
    const auto s1Size = s1.size();
    const auto s2Size = s2.size();
    size_t i1 = 0;
    size_t i2 = 0;
    if (s1Size == s2Size) {
        // Replacement
        while (i1 < s1Size) {
            if (s1[i1] != s2[i2]) {
                if (used) {
                    return false;
                } else {
                    used = true;
                }
            }
            i1++;
            i2++;
        }
    } else if (s1Size < s2Size) {
        // Insertion
        if (s1Size < s2Size - 1)
            return false;
        while (i1 < s1Size) {
            if (s1[i1] == s2[i2]) {
                i1++;
            } else {
                if (used) {
                    return false;
                } else {
                    used = true;
                }
            }
            i2++;
        }
    } else {
        // Deletion
        if (s2Size < s1Size - 1)
            return false;
        while (i1 < s1Size) {
            if (s1[i1] == s2[i2]) {
                i2++;
            } else {
                if (used) {
                    return false;
                } else {
                    used = true;
                }
            }
            i1++;
        }
    }
    return true;
}

int main() {
    assert(oneAway("", ""));
    assert(oneAway("", "a"));
    assert(oneAway("pale", "ple"));
    assert(oneAway("pales", "pale"));
    assert(oneAway("pale", "bale"));
    assert(!oneAway("pale", "bae"));
}