Skip to content

Commit 469d723

Browse files
authored
Add files via upload
1 parent a5bbd0d commit 469d723

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

LC_854.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package leetcode;
2+
3+
import java.util.HashMap;
4+
5+
class LC_854 {
6+
public int kSimilarity(String s1, String s2) {
7+
HashMap<String,Integer> dp = new HashMap<>();
8+
StringBuilder sb1 = new StringBuilder(s1);
9+
return solve(0,sb1, s2, dp);
10+
}
11+
12+
public int solve(int idx, StringBuilder s1, String s2, HashMap<String,Integer> dp) {
13+
if(idx >= s1.length()) return 0;
14+
if(dp.containsKey(s1.toString())) return dp.get(s1.toString());
15+
int ret = Integer.MAX_VALUE;
16+
if(s1.charAt(idx) == s2.charAt(idx)) {
17+
ret = solve(idx+1, s1,s2, dp);
18+
} else {
19+
for(int i=idx+1;i<s2.length();i++) {
20+
if(s2.charAt(idx) == s1.charAt(i) && s2.charAt(i) != s1.charAt(i)) {
21+
swap(idx, i, s1);
22+
int curr = 1+solve(idx+1, s1,s2, dp);
23+
swap(idx, i, s1);
24+
ret = Math.min(ret, curr);
25+
}
26+
}
27+
}
28+
if(ret == Integer.MAX_VALUE) ret = 0;
29+
dp.put(s1.toString(), ret);
30+
return ret;
31+
}
32+
33+
private void swap(int i, int j, StringBuilder sb) {
34+
char tmp = sb.charAt(i);
35+
sb.replace(i, i+1, sb.charAt(j)+"");
36+
sb.replace(j, j+1, tmp+"");
37+
}
38+
39+
}

0 commit comments

Comments
 (0)