Skip to content

Commit e6569cd

Browse files
committedAug 31, 2023
solves Edit distance in java
1 parent ea43fce commit e6569cd

File tree

3 files changed

+101
-0
lines changed

3 files changed

+101
-0
lines changed
 

‎README.txt

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
| 69 | [Sqrt(x)](https://leetcode.com/problems/sqrtx) | [![Java](assets/java.png)](src/Sqrtx.java) [![Python](assets/python.png)](python/sqrt.py) | |
7171
| 70 | [Climbing Stairs](https://leetcode.com/problems/climbing-stairs) | [![Java](assets/java.png)](src/ClimbingStairs.java) [![Python](assets/python.png)](python/climbing_stairs.py) | |
7272
| 71 | [Simplify Path](https://leetcode.com/problems/simplify-path) | [![Java](assets/java.png)](src/SimplifyPath.java) | |
73+
| 72 | [Edit Distance](https://leetcode.com/problems/edit-distance) | [![Java](assets/java.png)](src/EditDistance.java) | |
7374
| 73 | [Set Matrix Zeroes](https://leetcode.com/problems/set-matrix-zeroes) | [![Java](assets/java.png)](src/SetMatrixZeroes.java) | |
7475
| 74 | [Search a 2D Matrix](https://leetcode.com/problems/search-a-2d-matrix) | [![Java](assets/java.png)](src/SearchA2DMatrix.java) | |
7576
| 75 | [Sort Colors](https://leetcode.com/problems/sort-colors) | [![Java](assets/java.png)](src/SortColors.java) | |

‎src/EditDistance.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// https://leetcode.com/problems/edit-distance
2+
// T: O(m * n)
3+
// S: O(m * n)
4+
5+
public class EditDistance {
6+
public int minDistance(String word1, String word2) {
7+
if (word1.isEmpty()) return word2.length();
8+
if (word2.isEmpty()) return word1.length();
9+
10+
final int rows = word1.length() + 1, columns = word2.length() + 1;
11+
final int[][] dp = new int[rows][columns];
12+
13+
dp[0][0] = 0;
14+
15+
// first row
16+
for (int column = 1 ; column < columns ; column++) {
17+
dp[0][column] = column;
18+
}
19+
20+
// first column
21+
for (int row = 1 ; row < rows ; row++) {
22+
dp[row][0] = row;
23+
}
24+
25+
// rest of table
26+
for (int row = 1 ; row < rows ; row++) {
27+
for (int column = 1 ; column < columns ; column++) {
28+
if (word1.charAt(row - 1) == word2.charAt(column - 1)) {
29+
dp[row][column] = dp[row - 1][column - 1];
30+
} else {
31+
dp[row][column] = min(dp[row - 1][column - 1], dp[row - 1][column], dp[row][column - 1]) + 1;
32+
}
33+
}
34+
}
35+
36+
return dp[rows - 1][columns - 1];
37+
}
38+
39+
private int min(int a, int b, int c) {
40+
return Math.min(Math.min(a, b), c);
41+
}
42+
}

‎src/RangeSumQuery2DImmutable.java

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// https://leetcode.com/problems/range-sum-query-2d-immutable
2+
// n: matrix.length
3+
// m: matrix[0].length
4+
5+
6+
class NumMatrix {
7+
8+
final int rows;
9+
final int columns;
10+
final int[][] dp;
11+
12+
// T: O(n * m)
13+
// S: O(n * m)
14+
public NumMatrix(int[][] matrix) {
15+
this.rows = matrix.length;
16+
this.columns = matrix[0].length;
17+
this.dp = new int[rows][columns];
18+
19+
// first row
20+
dp[0][0] = matrix[0][0];
21+
for (int column = 1 ; column < columns ; column++) {
22+
dp[0][column] = dp[0][column - 1] + matrix[0][column];
23+
}
24+
25+
// first column
26+
for (int row = 1 ; row < rows ; row++) {
27+
dp[row][0] = dp[row - 1][0] + matrix[row][0];
28+
}
29+
30+
// rest of the matrix
31+
for (int row = 1 ; row < rows ; row++) {
32+
for (int column = 1 ; column < columns ; column++) {
33+
dp[row][column] = dp[row - 1][column] + dp[row][column - 1] - dp[row - 1][column - 1]
34+
+ matrix[row][column];
35+
}
36+
}
37+
}
38+
39+
// T: O(1)
40+
// S: O(1)
41+
public int sumRegion(int row1, int col1, int row2, int col2) {
42+
int result = this.dp[row2][col2];
43+
if (row1 > 0) {
44+
result -= this.dp[row1 - 1][col2];
45+
}
46+
if (col1 > 0) {
47+
result -= this.dp[row2][col1 - 1];
48+
}
49+
if (row1 > 0 && col1 > 0) {
50+
result += this.dp[row1 - 1][col1 - 1];
51+
}
52+
return result;
53+
}
54+
}
55+
56+
public class RangeSumQuery2DImmutable {
57+
58+
}

0 commit comments

Comments
 (0)
Please sign in to comment.