字符串变换
2016-07-20 21:13
204 查看
题目描述
现有一个字典,同时给定字典中的两个字符串s和t,给定一个变换,每次可以改变字符串中的任意一个字符,请设计一个算法,计算由s变换到t所需的最少步数,同时需要满足在变换过程中的每个串都是字典中的串。给定一个string数组dic,同时给定数组大小n,串s和串t,请返回由s到t变换所需的最少步数。若无法变换到t则返回-1。保证字符串长度均小于等于10,且字典中字符串数量小于等于500。class Change {
public:
int countChanges(vector<string> dic, int n, string s, string t)
{
// write code here
map<string,int> mapp;
for(int i=0;i<n;i++)
{
mapp[dic[i]]=1;
}
//宽度优先搜索
queue<string> q;
q.push(s);
map<string,int> mapped;
mapped[s]=1;
//bool flag=false; //标示是否能变换成功
int cur=1; //当前层待弹出节点数目
int next=0;
int step=0;
while(!q.empty())
{
while(cur--)
{
string str=q.front();
for(int i=0;i<str.size();i++)
{
string ss=str;
for(char c='a';c<='z';c++)
{
ss[i]=c;
if(ss==t)
{
return ++step;
}
if(mapped[ss]==0&&mapp[ss]==1)
{
next++;
mapped[ss]=1;
q.push(ss);
}
}
}
q.pop();
}
cur=next;
next=0;
step++;
}
return -1;
}
};
测试样例:
["abc","adc","bdc","aaa”],4,”abc","bdc"
返回:2
相关文章推荐
- 算法的时间复杂度(理论篇)
- 哈希表
- 堆排序
- 基于加速度传感器智能穿戴:神经网络以及判断过程
- Maven实战(一)--Why Maven
- hdoj 5053 the Sum of Cube [数学 立方求和]
- iOS消息推送之远程推送
- 第18章-Java IO系统
- linux 查看内核版本及发行版本
- Linux Shell里面生成随机数的一些思路分析
- 指针
- js学习第二天
- 关于求矩阵主对角线元素之和及副对角线元素之和的问题
- G - 美素数
- WSDL解析
- Codeforces Round #315 (Div. 2) B 水题强行set
- lambda表达式匿名函数
- UVA-113 Power of Cryptography
- 如何创建ID3DInclude的实例
- 学习排序算法