C++中的一编辑距离


假设我们有两个字符串s和t;我们需要检查它们是否只有一个编辑距离。一个编辑距离有三种类型:

  • 在s中插入一个字符得到t

  • 从s中删除一个字符得到t

  • 替换s中的一个字符得到t

因此,如果输入类似于s = "ab",t = "acb",则输出为True

为了解决这个问题,我们将遵循以下步骤:

  • n := s的长度,m := t的长度

  • 如果n < m,则:

    • 返回isOneEditDistance(t, s)

  • 初始化 i := 0,当 i < m 时,更新 (i 增加 1),执行:

    • 如果s[i]不等于t[i],则:

      • 如果n等于m,则:

        • 如果s从索引0到(i)的子串与t从索引0到(i)的子串相同,则返回true

      • 如果s从索引0到(i)的子串与t从索引0到(i-1)的子串相同,则返回true

  • 如果m + 1 等于 n,则返回 true

示例

让我们看看下面的实现来更好地理解:

在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isOneEditDistance(string s, string t) {
      int n = s.size();
      int m = t.size();
      if (n < m) {
         return isOneEditDistance(t, s);
      }
      for (int i = 0; i < m; i++) {
         if (s[i] != t[i]) {
            if (n == m) {
               return s.substr(i + 1) == t.substr(i + 1);
            }
            return s.substr(i + 1) == t.substr(i);
         }
      }
      return m + 1 == n;
   }
};
main(){
   Solution ob;
   cout << (ob.isOneEditDistance("ab", "acb"));
}

输入

s = "ab", t = "acb"

输出

1

更新于:2020年11月18日

122 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告