码迷,mamicode.com
首页 > 其他好文 > 详细

【程序员面试金典】面试题 01.05. 一次编辑

时间:2020-06-06 21:23:10      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:one   als   else   程序员面试   不能   class   差值   操作   个数   

题目

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

示例?1:

输入: 
first = "pale"
second = "ple"
输出: True

示例?2:

输入: 
first = "pales"
second = "pal"
输出: False

思路一:暴力法

根据字符串长度差值判断是替换还是插入或删除,通过两个字符串不同字符个数判断是否只经过一次编辑,如果不同字符大于1,则不能经过一次编辑直接返回false。

  • 字符串长度相等,则为替换,然后判断是否只有一个字符不同
  • 长度差值为1,则为插入或删除,这里通过移动长度长的字符串指针跳过不同字符并统计不同字符个数。

代码

时间复杂度:O(n)
空间复杂度:O(1)

class Solution {
public:
    bool oneEditAway(string first, string second) {
        int len1 = first.size(), len2 = second.size();
        int d = abs(len1 - len2);
        if (d == 0) {  // 判断是否替换
            int cnt = 0;
            for (int i = 0; i < len1; ++i) {
                if (first[i] != second[i]) ++cnt;
                if (cnt > 1) return false;
            }            
        } else if (d == 1) {
            int cnt = 0, i = 0, j = 0;            
            while (i < len1 && j < len2) {
                if (first[i] != second[j]) {
                    ++cnt;
                    if (cnt > 1) return false;
                    if (len1 < len2) ++j;
                    else ++i;
                } else {
                    ++i;
                    ++j;
                }                
            }
        } else {
            return false;
        }
        return true;
    }
};

思路二:头尾双指针

代码

时间复杂度:O(n)
空间复杂度:O(1)

class Solution {
public:
    bool oneEditAway(string first, string second) {
        if (first == second) return true;
        int len1 = first.size(), len2 = second.size();
        if (abs(len1 - len2) > 1) return false;
        int i = 0, j = len1 - 1, k = len2 - 1;
        while (i < len1 && i < len2 && first[i] == second[i]) ++i;
        while (j >= 0 && k >= 0 && first[j] == second[k]) --j,--k;
        return j - i < 1 && k - i < 1;
    }
};

【程序员面试金典】面试题 01.05. 一次编辑

标签:one   als   else   程序员面试   不能   class   差值   操作   个数   

原文地址:https://www.cnblogs.com/galaxy-hao/p/13056279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!