您的位置:首页 > 其它

字符串变换

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: