当前位置: 首页 > news >正文

代码随想录:110、字符串接龙

110. 字符串接龙

这道题使用bfs,一个map存是否走过该字符串,set集合存储所有字符串,从beginstr开始,改变每一位的字符,如果新字符在set中,加入队列,更新path。

1、条件准备

s存所有字符串,visit存到某字符串的最短距离。
初始把beginstr的距离为1加入
  string beginstr,endstr,str;int n;cin>>n;unordered_set<string> s;cin>>beginstr>>endstr;rep(i,1,n){cin>>str;s.insert(str);}unordered_map<string,int> visit;visit.insert({beginstr,1});

2、bfs

把起始字符串放入队列。bfs,path为当前字符串的最短距离。
逐个更改每个字符,如果新字符在set中并且没访问过,加入队列中。
如果新字符为endstr则输出。
bfs没找到则输出0
 queue<string> q;q.push(beginstr);while(!q.empty()){string cur=q.front();q.pop();int path=visit[cur];rep(i,0,cur.size()){string t=cur;for(int j=0;j<26;j++){t[i]=j+'a';if(t==endstr){cout<<(path+1);return 0;}if(s.find(t)!=s.end()&&visit.find(t)==visit.end()){visit.insert({t,path+1});q.push(t);}}}}cout<<'0';

3、总结

这个题使用bfs来计算最短路径。
完整代码如下:
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
#define endl '\n'int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string beginstr,endstr,str;int n;cin>>n;unordered_set<string> s;cin>>beginstr>>endstr;rep(i,1,n){cin>>str;s.insert(str);}unordered_map<string,int> visit;visit.insert({beginstr,1});queue<string> q;q.push(beginstr);while(!q.empty()){string cur=q.front();q.pop();int path=visit[cur];rep(i,0,cur.size()){string t=cur;for(int j=0;j<26;j++){t[i]=j+'a';if(t==endstr){cout<<(path+1);return 0;}if(s.find(t)!=s.end()&&visit.find(t)==visit.end()){visit.insert({t,path+1});q.push(t);}}}}cout<<'0';return 0;
}


http://www.mrgr.cn/news/42175.html

相关文章:

  • 数据结构-单链表的反转
  • ABC 373 F - Knapsack with Diminishing Values
  • vscode安装及c++配置编译
  • 【Spring】Spring Boot项目创建和目录介绍
  • 仅用pygame+python实现植物大战僵尸-----完成比完美更重要
  • 畅聊博客项目
  • 12.梯度下降法的具体解析——举足轻重的模型优化算法
  • FBX福币历史重演,ETH可能会在第四季度出现熊市
  • 行为设计模式 -观察者模式- JAVA
  • PDF转PPT:四款热门工具的亲身体验分享!
  • 搭建k8s集群服务(kubeadm方式)
  • 2019~2023博文汇总目录
  • MISC -第十天(音符加解密、敲击码、NtfsStreamsEditor工具)
  • SpringCloud Config配置中心 SpringCloud Bus消息总线
  • 【web安全】——文件包含漏洞
  • some 蓝桥杯题
  • (六)Shell 脚本应用(1):基础与环境变量详解
  • Linux驱动开发(速记版)--设备树插件
  • Linux命令:用于显示 Linux 发行版信息的命令行工具lsb_release详解
  • JAVA思维提升案例2