当前位置:网站首页>854. 相似度为 K 的字符串 BFS
854. 相似度为 K 的字符串 BFS
2022-07-05 21:30:00 【钰娘娘】
854. 相似度为 K 的字符串
字符串
s1
和s2
是k
相似 的(对于某些非负整数k
),如果我们可以交换s1
中两个字母的位置正好k
次,使结果字符串等于s2
。给定两个字谜游戏
s1
和s2
,返回s1
和s2
与k
相似 的最小k
。示例 1:
输入:s1 = "ab", s2 = "ba" 输出:1示例 2:
输入:s1 = "abc", s2 = "bca" 输出:2提示:
1 <= s1.length <= 20
s2.length == s1.length
s1
和s2
只包含集合{'a', 'b', 'c', 'd', 'e', 'f'}
中的小写字母s2
是s1
的一个字谜
做题结果
失败,dfs一直超时,头疼
方法:BFS
1. 起点步数为0,化解为求a变成b的最少步数问题
2. 每次用其中某个相同字符进行填写,挪动到对应位置
3. 找到了直接返回
class Solution {
public int kSimilarity(String s1, String s2) {
Queue<String> queue = new LinkedList<>();
Map<String,Integer> distances = new HashMap<>();
distances.put(s1,0);
queue.offer(s1);
while (!queue.isEmpty()){
String str = queue.poll();
int nextStep = distances.get(str)+1;
for(String next:getNext(str,s2)){
if(next.equals(s2)) return nextStep;
if(!distances.containsKey(next)){
distances.put(next,nextStep);
queue.offer(next);
}
}
}
return 0;
}
private List<String> getNext(String s,String hope){
List<String> ans = new ArrayList<>();
char[] cs1 = s.toCharArray();
char[] cs2 = hope.toCharArray();
int n = cs1.length;
int i = 0;
while (i<n&&cs1[i]==cs2[i]) ++i;
for(int j = i+1; j < n; j++){
if(cs1[j]!=cs2[j]&&cs1[j]==cs2[i]){
swap(cs1,i,j);
ans.add(new String(cs1));
swap(cs1,i,j);
}
}
return ans;
}
private void swap(char[] cs, int i, int j){
char temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}
}
边栏推荐
- Parker driver maintenance COMPAX controller maintenance cpx0200h
- Selenium gets the verification code image in DOM
- MMAP
- 五层网络协议
- "Grain mall" -- Summary and induction
- 基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
- XML modeling
- [daily training -- Tencent select 50] 89 Gray code (only after seeing the solution of the problem)
- Five layer network protocol
- SQL common syntax records
猜你喜欢
MySQL 千万数据量深分页优化, 拒绝线上故障!
Clion-MinGW编译后的exe文件添加ico图标
xlrd常见操作
Deployment of Jenkins under win7
Parker驱动器维修COMPAX控制器维修CPX0200H
第05章_存储引擎
PVC 塑料片BS 476-6 火焰传播性能测定
Pytoch practice -- MNIST dataset handwritten digit recognition
Realize the function of verifying whether the user has completed login when browsing the page
Recursive query of multi-level menu data
随机推荐
Golang(1)|从环境准备到快速上手
張麗俊:穿透不確定性要靠四個“不變”
Influence of oscilloscope probe on measurement bandwidth
LeetCode_哈希表_困难_149. 直线上最多的点数
vant 源码解析之 utils/index.ts 工具函数
"Grain mall" -- Summary and induction
让开发效率飞速提升的跨端方案
面试官:并发编程实战会吗?(线程控制操作详解)
R language [data management]
Prior knowledge of machine learning in probability theory (Part 1)
Xlrd common operations
Making global exception handling classes with aspect
int GetMonth( ) const throw( ); What does throw () mean?
EasyExcel的讀寫操作
How to send samples when applying for BS 476-7 display? Is it the same as the display??
事项研发工作流全面优化|Erda 2.2 版本如“七”而至
Influence of oscilloscope probe on signal source impedance
Problems encountered in office--
Recursive query of multi-level menu data
selenium 查找b或p标签的内容