#include <iostream>
using namespace std;
bool InsertEditApart(const string& str1, const string& str2)
{
if (str1.length() + 1 != str2.length())
{
return false;
}
int i = 0;
while ((i < str1.length()) && (str1[i] == str2[i]))
{
i++;
}
while ((i < str1.length()) && (str1[i] == str2[i + 1]))
{
i++;
}
return (i == str1.length());
}
bool ReplaceEditApart(const string& str1, const string& str2)
{
if (str1.length() != str2.length())
{
return false;
}
int i = 0;
while ((i < str1.length()) && (str1[i] == str2[i]))
{
i++;
}
if (i == str1.length())
{
return false;
}
i++;
while ((i < str1.length()) && (str1[i] == str2[i]))
{
i++;
}
return (i == str1.length());
}
bool OneEditApart(const string& str1, const string& str2)
{
return
InsertEditApart(str1, str2) ||
InsertEditApart(str2, str1) ||
ReplaceEditApart(str1, str2);
}
void PrintResult(const string& str1, const string& str2)
{
cout << "OneEditApart(" << str1 << "," << str2 << "): " << (OneEditApart(str1, str2) ? "true" : "false") << endl;
}
int main(int argc, char* argv[])
{
PrintResult("cat", "dog");
PrintResult("cat", "cats");
PrintResult("cat", "cut");
PrintResult("cat", "cast");
PrintResult("cat", "at");
PrintResult("cat", "acts");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgSW5zZXJ0RWRpdEFwYXJ0KGNvbnN0IHN0cmluZyYgc3RyMSwgY29uc3Qgc3RyaW5nJiBzdHIyKQp7CglpZiAoc3RyMS5sZW5ndGgoKSArIDEgIT0gc3RyMi5sZW5ndGgoKSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCWludCBpID0gMDsKCQoJd2hpbGUgKChpIDwgc3RyMS5sZW5ndGgoKSkgJiYgKHN0cjFbaV0gPT0gc3RyMltpXSkpCgl7CgkJaSsrOwoJfQoJCgl3aGlsZSAoKGkgPCBzdHIxLmxlbmd0aCgpKSAmJiAoc3RyMVtpXSA9PSBzdHIyW2kgKyAxXSkpCgl7CgkJaSsrOwoJfQoJCglyZXR1cm4gKGkgPT0gc3RyMS5sZW5ndGgoKSk7Cn0KCmJvb2wgUmVwbGFjZUVkaXRBcGFydChjb25zdCBzdHJpbmcmIHN0cjEsIGNvbnN0IHN0cmluZyYgc3RyMikKewoJaWYgKHN0cjEubGVuZ3RoKCkgIT0gc3RyMi5sZW5ndGgoKSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCWludCBpID0gMDsKCQoJd2hpbGUgKChpIDwgc3RyMS5sZW5ndGgoKSkgJiYgKHN0cjFbaV0gPT0gc3RyMltpXSkpCgl7CgkJaSsrOwoJfQoJCglpZiAoaSA9PSBzdHIxLmxlbmd0aCgpKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCQoJaSsrOwoJCgl3aGlsZSAoKGkgPCBzdHIxLmxlbmd0aCgpKSAmJiAoc3RyMVtpXSA9PSBzdHIyW2ldKSkKCXsKCQlpKys7Cgl9CgkKCXJldHVybiAoaSA9PSBzdHIxLmxlbmd0aCgpKTsKfQoKYm9vbCBPbmVFZGl0QXBhcnQoY29uc3Qgc3RyaW5nJiBzdHIxLCBjb25zdCBzdHJpbmcmIHN0cjIpCnsKCXJldHVybgoJCUluc2VydEVkaXRBcGFydChzdHIxLCBzdHIyKSB8fAoJCUluc2VydEVkaXRBcGFydChzdHIyLCBzdHIxKSB8fAoJCVJlcGxhY2VFZGl0QXBhcnQoc3RyMSwgc3RyMik7Cn0KCnZvaWQgUHJpbnRSZXN1bHQoY29uc3Qgc3RyaW5nJiBzdHIxLCBjb25zdCBzdHJpbmcmIHN0cjIpCnsKCWNvdXQgPDwgIk9uZUVkaXRBcGFydCgiIDw8IHN0cjEgPDwgIiwiIDw8IHN0cjIgPDwgIik6ICIgPDwgKE9uZUVkaXRBcGFydChzdHIxLCBzdHIyKSA/ICJ0cnVlIiA6ICJmYWxzZSIpIDw8IGVuZGw7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKCVByaW50UmVzdWx0KCJjYXQiLCAiZG9nIik7CglQcmludFJlc3VsdCgiY2F0IiwgImNhdHMiKTsKCVByaW50UmVzdWx0KCJjYXQiLCAiY3V0Iik7CglQcmludFJlc3VsdCgiY2F0IiwgImNhc3QiKTsKCVByaW50UmVzdWx0KCJjYXQiLCAiYXQiKTsKCVByaW50UmVzdWx0KCJjYXQiLCAiYWN0cyIpOwoJCglyZXR1cm4gMDsKfQ==