zoukankan      html  css  js  c++  java
  • 【LeetCode-字符串】一次编辑

    题目描述

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

    输入: 
    first = "pale"
    second = "ple"
    输出: True
    
    输入: 
    first = "pales"
    second = "pal"
    输出: False
    

    题目链接: https://leetcode-cn.com/problems/one-away-lcci/

    思路1

    使用和编辑距离一样的方法计算两个字符串的编辑距离,然后判断编辑距离是否小于等于 1。代码如下:

    class Solution {
    public:
        bool oneEditAway(string first, string second) {
            int m = first.size();
            int n = second.size();
            vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
            for(int i=0; i<=m; i++) dp[i][0] = i;
            for(int j=0; j<=n; j++) dp[0][j] = j;
            for(int i=1; i<=m; i++){
                for(int j=1; j<=n; j++){
                    int a = dp[i-1][j] + 1;
                    int b = dp[i][j-1] + 1;
                    int c = dp[i-1][j-1];
                    if(first[i-1]!=second[j-1]) c++;
                    dp[i][j] = min(a, min(b, c));
                }
            }
            if(dp[m][n]<=1) return true;
            else return false;
        }
    };
    
    • 时间复杂度:O(mn)
    • 空间复杂度:O(mn)

    思路2

    使用双指针来做。使用 3 个指针:i, j, k。i, j 在 str1 上从两边向中间移动,i, k 在 str2 上从两边向中间移动,只有 str1[i]==str2[i] 时,i++;当 str1[j]==str2[k] 时,j--,k--,最后判断 j-i+1 和 k-i+1 是否小于等于 1. 代码如下:

    class Solution {
    public:
        bool oneEditAway(string first, string second) {
            int m = first.size();
            int n = second.size();
            if(abs(m-n)>1) return false;
    
            int i = 0;
            int j = m - 1;
            int k = n - 1;
            while(i<m && i<n && first[i]==second[i]) i++;
            while(j>=0 && k>=0 && first[j]==second[k]){
                j--;
                k--;
            }
            return j-i+1<=1 && k-i+1<=1;
        }
    };
    
    • 时间复杂度:O(max(m,n))
    • 空间复杂度:O(1)
  • 相关阅读:
    采用get方式提交数据到服务器实例
    android之HttpURLConnection
    Android中的传感器
    有符号类型无符号类型转换
    一些常用位运算示例
    C++ / CLI 调用 C++ /Native 随记
    Linux Shell Demo
    Linux Shell 脚本入门
    Linux 编译 websocket++
    Linux 编写c++程序之openssl
  • 原文地址:https://www.cnblogs.com/flix/p/13549659.html
Copyright © 2011-2022 走看看