java实战字符串1:给定两个字符串 s 和 t,判断他们的编辑距离是否为 1。


题目描述
给定两个字符串 s 和 t,判断他们的距离是否为 1。

注意:满足距离等于 1 有三种可能的情形

往 s 中插入一个字符得到 t
从 s 中删除一个字符得到 t
在 s 中替换一个字符得到 t

解答要求
时间限制:1000ms, 内存限制:256MB
输入
输入两个字符串 s, t

输出
true或者 false

样例1
输入:

ab

acb
输出:

true

样例 2 

输入:

cab
ad
输出

false

样例 3 

输入:

1203
1213

解析:

public class Main {
    public static boolean isOneDistance(String s, String t) {
        int sLen = s.length();
        int tLen = t.length();
        if (Math.abs(sLen - tLen) > 1) {
            return false;
        }
        // 插入和删除是一种逻辑(始终保证t是最长的,当是需要删除时,就将会s和t的角色互换即可)
        if (sLen > tLen) {
            return isOneDistance(t, s);
        }
        for (int i = 0; i < sLen; i++) {
            // 找不同的字符
            if (s.charAt(i) != t.charAt(i)) {
                if (sLen == tLen) { // 判断s和t是否等长,如果等长,后续的字符串必然相等
                    return s.substring(i + 1).equals(t.substring(i + 1));
                    //substring(i)只写一个索引值,默认是开始索引,结束到字符串某位,两个空串也是相等的
                } else { //
                    return s.substring(i).equals(t.substring(i + 1));
                }
            }
        }
        return sLen + 1 == tLen;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String sStr = sc.nextLine();
        String tStr = sc.nextLine();
        System.out.println(isOneDistance(sStr, tStr));

    }
}