-
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathDeleteOperationTwoStrings.java
75 lines (57 loc) · 2 KB
/
DeleteOperationTwoStrings.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package DailyChallenges.MayChallenges;
import java.util.Arrays;
public class DeleteOperationTwoStrings {
public static int minDistance(String word1, String word2) {
// return minDistance(word1, word2, 0, 0);
int[][] storage = new int[word1.length()][word2.length()];
for (int i = 0; i < storage.length; i++) {
Arrays.fill(storage[i], -1);
}
return minDistanceDP(word1, word2, 0, 0, storage);
}
// this gives TLE for large inputs
private static int minDistance(String word1, String word2, int vid1, int vid2) {
if (vid1 == word1.length())
return word2.length() - vid2;
if (vid2 == word2.length())
return word1.length() - vid1;
char ch1 = word1.charAt(vid1);
char ch2 = word2.charAt(vid2);
int result = 0;
if (ch1 == ch2) {
result = minDistance(word1, word2, vid1 + 1, vid2 + 1);
} else {
int deleteW1 = minDistance(word1, word2, vid1 + 1, vid2);
int deleteW2 = minDistance(word1, word2, vid1, vid2 + 1);
result = 1 + Math.min(deleteW1, deleteW2);
}
return result;
}
private static int minDistanceDP(String word1, String word2, int vid1, int vid2, int[][] storage) {
if (vid1 == word1.length())
return word2.length() - vid2;
if (vid2 == word2.length())
return word1.length() - vid1;
if (storage[vid1][vid2] != -1)
return storage[vid1][vid2];
char ch1 = word1.charAt(vid1);
char ch2 = word2.charAt(vid2);
int result = 0;
if (ch1 == ch2) {
result = minDistanceDP(word1, word2, vid1 + 1, vid2 + 1, storage);
} else {
int deleteW1 = minDistanceDP(word1, word2, vid1 + 1, vid2, storage);
int deleteW2 = minDistanceDP(word1, word2, vid1, vid2 + 1, storage);
result = 1 + Math.min(deleteW1, deleteW2);
}
storage[vid1][vid2] = result;
return result;
}
public static void main(String[] args) {
String word1 = "sea";
String word2 = "eat";
System.out.println(minDistance(word1, word2));
System.out.println(minDistance("leetcode", "etco"));
System.out.println(minDistance("leetcoasidhfoaindvsilfnaosdde", "etcogohiasoefdnas"));
}
}