《Cracking the Coding Interview程序员面试金典》----字符串变换(字典树)

时间限制:3秒  空间限制:32768K  热度指数:327
本题知识点:  字符串  队列
 算法知识视频讲解

题目描述

现有一个字典,同时给定字典中的两个字符串s和t,给定一个变换,每次可以改变字符串中的任意一个字符,请设计一个算法,计算由s变换到t所需的最少步数,同时需要满足在变换过程中的每个串都是字典中的串。

给定一个string数组dic,同时给定数组大小n,串s和串t,请返回由s到t变换所需的最少步数。若无法变换到t则返回-1。保证字符串长度均小于等于10,且字典中字符串数量小于等于500。

测试样例:
["abc","adc","bdc","aaa”],4,”abc","bdc"

返回:2

思路:图的方式进行处理,先对现有词典中的单词进行排序,遍按照字符长度生成n棵树,在每棵树中进行连接,如果两个给定的字符串s和t中只有一个单词不同的连接在一起,否则不连接。然后输入一个单词,对该单词进行遍历,当搜索到另外一个单词时,输出路径。

代码如下:

#include
#include
#include
#include
using namespace std;

int countChanges(vector dic, int n, string s, string t) {
        // write code here
        map mapp;
        for(int i=0;i q;
        q.push(s);
        map 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 v;
	int m;
	string temp;
	while (cin >> m)
	{
	    v.clear();
			for (int j = 0; j < m; j++)
			{
				cin >> temp;
				v.push_back(temp);
			}
		cout<

 
   

不懂的可以加我的QQ群:261035036(IT程序员面试宝典

群) 欢迎你到来哦,看了博文给点脚印呗,谢谢啦~~


你可能感兴趣的:(《Cracking the Coding Interview程序员面试金典》----字符串变换(字典树))