最小操作数-Java实现
来源:互联网 发布:免费淘宝客高佣金采集 编辑:程序博客网 时间:2024/05/21 10:27
最小操作数
题目详情:
给了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函数是为方便你在提交代码之前进行在线编译测试,可不完成。
import java.util.*;public class 最小操作数 {public static void main(String[] args) {String []dict={"hot","dot","dog","lot","log"};String a="hit",b="cog";System.out.println(finMin(a,b,dict));}public static ArrayList<ArrayList<String>> finMin(String a,String b,String[]dict){if(a.equals(b)) return null;ArrayList<String> dictlist=new ArrayList<String>();//把字典转换成list,易于删除for(int i=0;i<dict.length;i++)dictlist.add(dict[i]);ArrayList<ArrayList<String>> result=new ArrayList<ArrayList<String>>();//最小步数修改方法result.add(new ArrayList<String>());result.get(0).add(a);//起始为aboolean find=false;//可以到达bint step=1;//方法的步数while(!find){boolean ifremove[]=new boolean[dictlist.size()];//字典元素移除标记for(int j=0;j<ifremove.length;j++)ifremove[j]=false;int size=result.size();for(int i=0;i<size;i++){if(oneStepTo(b,result.get(i).get(step-1)))//可一步变成b{find=true;break;}else{if(dictlist.size()==0){result.remove(i);size--;i--;continue;}ArrayList<String> temp= new ArrayList<String>();temp.addAll(result.get(i));result.remove(i);size--;i--;for(int j=0;j<dictlist.size();j++)//添加可行分支路径{if(oneStepTo(temp.get(temp.size()-1),dictlist.get(j))){ifremove[j]=true;result.add(new ArrayList<String>());result.get(result.size()-1).addAll(temp);result.get(result.size()-1).add(dictlist.get(j));}}}}for(int j=0,current=0;current<ifremove.length;j++,current++)//处理restdict{if(ifremove[current]==true){dictlist.remove(j);j--;}}if(!find) step++;}return result;}public static boolean oneStepTo(String a,String b)//可否一次到达{int step=0;for(int i=0;i<a.length();i++){if(a.charAt(i)!=b.charAt(i)) step++;}if(step==1) return true;return false;}}
- 最小操作数-Java实现
- 最小操作数递归实现
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 最小操作数
- 把数组排成最小的数(Java实现)
- JAVA实现一个掷骰子,及三个数取最小
- 把数组排成最小的数java实现
- 庞果最小操作数
- 挑战编程:最小操作数
- 最小操作数(改版)
- 最小操作数简易版
- 25最小操作数问题
- java递归查找最小数
- 【庞果英雄会】最小操作数
- 适配器模式
- 中关村-DIY笔记本之散热底座导购
- Java泛型简明教程
- linux文件系统--虚拟文件系统与进程
- AchartEngine的柱状图属性设置
- 最小操作数-Java实现
- Erlang 不能错过的盛宴
- 设计模式介绍
- SQL级联删除
- Opencv Python版学习笔记(一)图像直方图
- Oracle中组合索引的使用详解
- Android开发环境搭建
- VIM插件Winmanager buftype问题
- extern &&头文件