One Edit Distance
2014-12-10 15:03
211 查看
Given two strings S and T, determine if they are both one edit distance apart.
思路:可以用edit distance的方法来做,但是超时,这个方法是O(m*n) 空间是O(m*n)
思路2:利用只需要判断一个edit这个特点,如果只有1个edit操作,只有以下几种情况:
1. 长度相同,那么只有一个update操作,就数一下,如果有第二个不相同,那就return false;
2. 长度差1,那么就有insert或者delete操作,找到长string的,第一不相同的位置,那么长string后面的应该与短string相同,否则return false
3. 长度差大于1,return false;
这个方法可以到O(n).
思路:可以用edit distance的方法来做,但是超时,这个方法是O(m*n) 空间是O(m*n)
public class Solution { public boolean isOneEditDistance(String s, String t) { int m = s.length(); int n = t.length(); if(Math.abs(m-n) >=2) return false; int[][] dp = new int[m+1][n+1]; for(int i=0; i<m+1; i++){ for(int j=0; j<n+1; j++){ if(i==0){ dp[i][j] = j; }else if(j==0){ dp[i][j] = i; } else { if(s.charAt(i-1) == t.charAt(j-1)){ dp[i][j] = dp[i-1][j-1]; } else { dp[i][j] = 1 + Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],(dp[i-1][j]))); } } } } return dp[m] == 1; } }
思路2:利用只需要判断一个edit这个特点,如果只有1个edit操作,只有以下几种情况:
1. 长度相同,那么只有一个update操作,就数一下,如果有第二个不相同,那就return false;
2. 长度差1,那么就有insert或者delete操作,找到长string的,第一不相同的位置,那么长string后面的应该与短string相同,否则return false
3. 长度差大于1,return false;
这个方法可以到O(n).
public class Solution { public boolean isOneEditDistance(String s, String t) { if(s == null || t == null) return false; int m = s.length(); int n = t.length(); if(Math.abs(m - n)>=2) return false; if(m == n) return isOneDiff(s,t); if(m - n == 1) return isOneUpdate(s, t); if(n - m == 1) return isOneUpdate(t, s); return false; } public boolean isOneDiff(String s, String t){ if(s.length() == 0 && t.length() == 0) return false; boolean find = false; for(int i=0; i<s.length(); i++){ if(s.charAt(i) != t.charAt(i)){ if(!find){ find = true; } else { return false; } } } return find; } // s.length() > t.length(); public boolean isOneUpdate(String s, String t){ int index = 0; for(int i=0; i<t.length(); i++){ if(s.charAt(i)!=t.charAt(i)){ return s.substring(i+1).equals(t.substring(i)); } } return true; } }
相关文章推荐
- Leetcode-One Edit Distance
- One Edit Distance
- LeetCode - One Edit Distance
- leetcode - One Edit Distance
- 161. One Edit Distance
- leetcode - One Edit Distance
- 161. One Edit Distance
- Leetcode One Edit Distance
- #leetcode#One Edit Distance
- leetcode 161: One Edit Distance
- Leetcode: One Edit Distance
- One Edit Distance
- 1st round, 161 One Edit Distance
- [LeetCode] One Edit Distance 一个编辑距离
- [leetcode] One Edit Distance 解题报告
- LeetCode – Refresh – One Edit Distance
- [LeetCode] One Edit Distance
- 161. One Edit Distance
- [Locked] One Edit Distance
- 161. One Edit Distance