最小操作数(改版)
来源:互联网 发布:linux 查看syslog 编辑:程序博客网 时间:2024/05/18 03:55
题目详情:
给了A、B两个单词和一个单词集合Dict,每个的长度都相同。我们希望通过若干次操作把单词A变成单词B,每次操作可以改变单词中的一个字母,同时,新产生的单词必须是在给定的单词集合Dict中。求所有行得通步数最少的修改方法。
举个例子如下:
Given:
A = "hit"
B = "cog"
Dict = ["hot","dot","dog","lot","log"]
Return
[
["hit","hot","dot","dog","cog"],
["hit","hot","lot","log","cog"]
]
即把字符串A = "hit"转变成字符串B = "cog",有以下两种可能:
- "hit" -> "hot" -> "dot" -> "dog" -> "cog";
- "hit" -> "hot" -> "lot" -> "log" ->"cog"。
答题说明:
- A和B相同的情况下不需要做转换,此时直接返回空集;
- main函数是为方便你在提交代码之前进行在线编译测试,可不完成。
#include <string>#include <vector>#include <iostream>#include <set>using namespace std;class Solution{private:vector<string> changePath;public:int length;int compareStr(string &src,string &dst){int count = 0;int len = src.length();if(src.compare(" ")==0 || dst.compare(" ")== 0)return 0;for(int i=0;i<len;i++){if(src[i] != dst[i]){count++;if(count>1)break;}}return count==1?1:0;}void findLadders(string start, string end, vector<string>& dict){changePath.push_back(start);if(compareStr(start,end)){changePath.push_back(end);if(changePath.size()<=length){length = changePath.size();PrintPath(changePath);}changePath.pop_back();return ;}vector<string>::iterator iter;for(iter=dict.begin();iter!=dict.end();iter++){if(*iter == " ")continue;string Tempstr = *iter;if(compareStr(start,Tempstr)) //找到一个差异为1个字符的单词{*iter = " "; //将此单词在字典中删除findLadders(Tempstr,end,dict);changePath.pop_back();*iter = Tempstr;}}}void PrintPath(vector<string> &vec){for(vector<string>::iterator iter=vec.begin();iter!=vec.end();iter++){cout<<*iter;if((iter+1) != vec.end())cout<<"->";}cout<<endl;}};int main(){ Solution aa;aa.length = 1000;string start = "hit";string end = "cog";vector<string> dict;vector<string> vec;dict.push_back("hot"); dict.push_back("dot"); dict.push_back("dog"); dict.push_back("lot"); dict.push_back("log"); aa.findLadders(start,end,dict);system("pause");return 0;}
- 最小操作数(改版)
- 最小操作数 (错误笔记)
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数-Java实现
- 庞果最小操作数
- 挑战编程:最小操作数
- 最小操作数递归实现
- 最小操作数简易版
- 25最小操作数问题
- 【庞果英雄会】最小操作数
- [PHP解算法题]最小操作数
- 最小操作数,木块砌墙问题
- Google编程题:最小操作数
- Linux设备驱动——简单的字符驱动
- SVN Diff文件处理分析
- C++编码规范与指导
- Linq to sql :查询句法---分页分组查询
- CloudStack无法添加模板和iso
- 最小操作数(改版)
- Linq to sql :查询句法---distinct
- 项目安排
- 字符设备驱动——申请设备号、注册字符设备
- Linq to sql :查询句法--in 操作
- 提高你的Java代码质量吧:提防包装类型的null值
- 一个简单的信号量的例子
- MFC多文档常用函数
- 视差滚动(Parallax Scrolling)效果的原理和实现