给你两个字符串 S 和 T, 判断他们是否只差一步编辑。
样例:
给你字符串 s = “aDb”, t= “adb”
返回 true
#ifndef C640_H
#define C640_H
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
/*
* @param s: a string
* @param t: a string
* @return: true if they are both one edit distance apart or false
*/
bool isOneEditDistance(string &s, string &t) {
// write your code here
//在s和t长度相同时,判断是否是插入删除
//在s和t长度相差1时,判断是否是替换
if (s.size() == t.size())
return isReplace(s, t);
else if (s.size() == t.size() + 1)
return isInsert(s, t);
else if (s.size() == t.size() - 1)
return isInsert(t, s);
else
return false;
}
//判断是否是插入删除,默认s的长度比t大1
bool isInsert(string &s, string &t)
{
int i = 0;
if (t.empty())
return true;
while (i< t.size())
{
if (t[i] == s[i] || t[i] == s[i + 1])
++i;
else
return false;
}
return true;
}
//判断是否是替换,默认s和t长度相同
bool isReplace(string &s, string &t)
{
int i = 0;
int num = 0;
while (i < s.size())
{
if (t[i] != s[i])
{
num++;
}
i++;
}
return num == 1;
}
};
#endif