給定兩個字符串?s 和 t,判斷他們的編輯距離是否為 1。
注意:
滿足編輯距離等于 1 有三種可能的情形:
往 s?中插入一個字符得到 t
從 s?中刪除一個字符得到 t
在 s?中替換一個字符得到 t
示例 1:
輸入: s = "ab", t = "acb"
輸出: true
解釋: 可以將 'c' 插入字符串 s?來得到 t。
示例 2:
輸入: s = "cab", t = "ad"
輸出: false
解釋: 無法通過 1 步操作使 s 變為 t。
示例 3:
輸入: s = "1203", t = "1213"
輸出: true
解釋: 可以將字符串 s?中的 '0' 替換為 '1' 來得到 t。
思路:很簡單,你可以三個情形都對應的遍歷一遍判斷即可。
但是稍微有一點優化,其實如果s能刪除一個字符變成t,那么t一定也可以插入一個字符得到s。
所以刪除插入沒必要都寫,我們把短的字符串放在左邊(s),就不用寫刪除了。
class Solution {public boolean isOneEditDistance(String s, String t) {int ns = s.length();int nt = t.length();//交換if (ns > nt)return isOneEditDistance(t, s);//長度差超過1if (nt - ns > 1)return false;//找到不同的字符for (int i = 0; i < ns; i++)if (s.charAt(i) != t.charAt(i))//如長度不同,那么兩字符串后面應該相同if (ns == nt)return s.substring(i + 1).equals(t.substring(i + 1));//如長度不同,那么必須在s[i]插入t[i],所以要保證s.substring(i).equals(t.substring(i + 1))elsereturn s.substring(i).equals(t.substring(i + 1));return (ns + 1 == nt);}
}