编辑距离 II-LintCode

来源:互联网 发布:族谱排版软件 编辑:程序博客网 时间:2024/06/06 07:29

给你两个字符串 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