• ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java


    Given two strings S and T, determine if they are both one edit distance apart.

    给定两个字符串,判断他们是否是一步变换得到的。

    在这里需要注意几点:

    1、不等于1的变换都要返回false(包括变换次数等于0)。

    2、还有很多细节需要注意。

    方法如下:

    1、直接判断:1)如果差值大于1,直接返回false。

            2)如果长度相同,那么依次判断,是否只有一个字母不一样。

            3)如果不一样,那么看是否是只是多出了一个字母。

    public class Solution {
        public boolean isOneEditDistance(String s, String t) {
            int len1 = s.length();
            int len2 = t.length();
            if (len1 < len2){
                return isOneEditDistance(t, s);
            }
            if (len1 - len2 > 1){
                return false;
            }
            boolean flag = false;
            if (len1 == len2){
                for (int i = 0; i < len1; i++){
                    if (s.charAt(i) != t.charAt(i)){
                        if (!flag){
                            flag = true;
                        } else {
                            return false;
                        }
                    }
                }
                return flag;
            } else {
                int sStart = 0;
                int tStart = 0;
                while (tStart < len2){
                    if (s.charAt(sStart) == t.charAt(tStart)){
                        tStart++;
                        sStart++;
                    } else {
                        if (!flag){
                            flag = true;
                            sStart++;
                        } else {
                            return false;
                        }
                    }
                }
                return true;
            }
        }
    }

    2、利用substring和equals来判断,代码会简洁很多。

    public class Solution {
        public boolean isOneEditDistance(String s, String t) {
            for (int i = 0; i < Math.min(s.length(), t.length()); i++){
                if (s.charAt(i) != t.charAt(i)){
                    if (s.length() == t.length()){
                        return s.substring(i + 1).equals(t.substring(i + 1));
                    } else if (s.length() == t.length() - 1){
                        return s.substring(i).equals(t.substring(i + 1));
                    } else {
                        return s.substring(i + 1).equals(t.substring(i));
                    }
                }
            }
            return Math.abs(s.length() - t.length()) == 1;
        }
    }

    这两者的速度都差不多,都是2ms左右,答案有一些是1ms,将string换成char[]就可以了,所以就没贴上去的必要了。

  • 相关阅读:
    2-1Java简介
    02-安装JDK
    任务34:Cookie-based认证实现
    任务31:课时介绍 & 任务32:Cookie-based认证介绍 &任务33:34课 :AccountController复制过来没有移除[Authorize]标签
    任务30:RoutingMiddleware介绍以及MVC引入
    任务29:自己动手构建RequestDelegate管道
    任务28:RequestDelegate管道实现思路
    任务27:Middleware管道介绍
    任务26:dotnet watch run 和attach到进程调试
    任务25:IHostEnvironment和 IApplicationLifetime介绍
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6111794.html
Copyright © 2020-2023  润新知