854. K-Similar Strings
Hard
14216FavoriteShare
Strings A
and B
are K
-similar (for some non-negative integer K
) if we can swap the positions of two letters in A
exactly K
times so that the resulting string equals B
.
Given two anagrams A
and B
, return the smallest K
for which A
and B
are K
-similar.
Example 1:
Input: A = "ab", B = "ba"
Output: 1
Example 2:
Input: A = "abc", B = "bca"
Output: 2
Example 3:
Input: A = "abac", B = "baca"
Output: 2
Example 4:
Input: A = "aabc", B = "abca"
Output: 2
Note:
1 <= A.length == B.length <= 20
A
andB
contain only lowercase letters from the set{'a', 'b', 'c', 'd', 'e', 'f'}
class Solution {
public:
int dfs(int now, int step, string& A, string& B) {
int cnt = 0;
for (int i = 0; i < A.size(); i++) if (A[i] != B[i]) cnt ++;
if (cnt == 0) return 1;
if (cnt / 2 > step - now) return 0;
for (int l = 0; l < A.size(); l++) {
if (A[l] == B[l]) continue;
for (int r = l + 1; r < A.size(); r++) {
if (A[r] == B[r]) continue;
if (A[l] != B[r]) continue;
swap(A[l], A[r]);
if (dfs(now + 1, step, A, B)) return 1;
swap(A[l], A[r]);
}
break;
}
return 0;
}
int kSimilarity(string A, string B) {
int ret = 0;
for (int i = 0; i <= A.size(); i++) {
if (dfs(0, i, A, B)) {
ret = i;
break;
}
}
return ret;
}
};