Word Ladder

Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.

要求在给定字典dict中寻找可以变幻的词(只有一位不同)确认是否能够转换至 end  一开始想的是用回溯递归进行遍历求解 但是 由太多的重复情况 而且对于dict的管理也比较麻烦  后来变换思维 不从dict中找词匹配 而是建一个栈 先把需要比较的词 按位 从a-z分别替换  再到dict中查找 若该词存在则加入栈 直至栈空  ps;在替换第j位的字母时 使用 String ntmp=com.substring(0, j)+m+com.substring(j+1,com.length());时 总是说 memory limit exceeded 不知道为什么 改为字符数组后就解决了这问题  代码如下:

public static int ladderLength1(String start, String end, Set<String> dict) {
        LinkedList<String> que=new LinkedList<>();
        dict.remove(start);
        que.offer(start);
        int count =0;
        int level =1;
        int res=1;
        while(!que.isEmpty()){
        	count=level;
        	level=0;
        	for(int i=0;i<count;i++){
        		String com=que.poll();
        		for(int j=0;j<com.length();j++){
        			for(char m='a';m<='z';m++){
        				if(com.charAt(j)==m)continue;
        				String ntmp=com.substring(0, j)+m+com.substring(j+1,com.length());
        				if(ntmp.equals(end))return res+1;
        				if(dict.contains(ntmp)){
        					level++;       					
        					dict.remove(ntmp);
        					que.add(ntmp);
        				}
        			}
        		}
        	}
        	res++;
        }
		return 0;
    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值