854. K-Similar Strings
Hard
25626FavoriteShare
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 kSimilarity(string A, string B) {
int n=A.size();
int res=0;
queue<string> q;
q.push(A);
unordered_set<string> visited;
visited.insert(A);
while(!q.empty()){
for(int k=q.size();k>0;k--){
string cur=q.front();q.pop();
int i=0;
if(cur==B) return res;
while(i<n && cur[i]==B[i]) i++;
for(int j=i+1;j<n;j++){
if(cur[j]!=B[j] && cur[j]==B[i]){
swap(cur[j],cur[i]);
if(visited.count(cur)==0){
q.push(cur);
visited.insert(cur);
}
swap(cur[j],cur[i]);
}
}
}
res++;
}
return -1;
}
};
- Runtime: 56 ms, faster than 56.94% of C++ online submissions for K-Similar Strings.
- Memory Usage: 21.8 MB, less than 100.00% of C++ online submissions for K-Similar Strings.
- Next challenges:
- Clone Graph
- Shortest Distance from All Buildings
- Cat and Mouse
- 使用bfs求最短距离!!!