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)); } }