126 word Ladder

本文介绍了一种寻找两个单词间最短转换路径的算法,通过字典查找和递归方式实现从起始单词到目标单词的所有可能转换序列。该算法确保每次只改变一个字母,并且每个中间状态都是有效单词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) 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"]

Return

  [
    ["hit","hot","dot","dog","cog"],
    ["hit","hot","lot","log","cog"]
  ]

Note:

  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
public class Solution {
    public List<List<String>> findLadders(String start, String end, Set<String> dict) {
        List<List<String>> result=new ArrayList<List<String>>();
        HashMap<String,Integer> map=ladderLength(start,end,dict);
        if (map.containsKey(end)==false) return result;
        int ladderSize=map.get(end);
        result=getLadders(start,end,map,ladderSize);
        return result;
    }
    public List<List<String>> getLadders(String start, String end, HashMap<String, Integer> map,int ladderSize){
        List<List<String>> result=new ArrayList<List<String>>();
        List<String> oneStep = new ArrayList<String>();
        if(ladderSize==1){
            oneStep.add(start);
            result.add(oneStep);
            return result;
        }
        String temp="";
        for(int i=0;i<end.length();i++){
            for(int j=0;j<26;j++){
                char m=(char)('a'+j);
                temp=end.substring(0,i)+m+end.substring(i+1);
                if(map.containsKey(temp)&&map.get(temp)==ladderSize-1){
                    oneStep.add(temp);
                }
            }
        }
        for(int i=0;i<oneStep.size();i++){
            List<List<String>> tempList=getLadders(start,oneStep.get(i),map,ladderSize-1);
            for(int j=0;j<tempList.size();j++){
                List<String> tempPath=tempList.get(j);
                tempPath.add(end);
             result.add(tempPath);
            }
        }
        return result;
    }
    
    public HashMap<String,Integer> ladderLength(String start, String end, Set<String> dict) {
        HashMap<String,Integer> map=new HashMap<String,Integer>();
        Queue<String>q=new LinkedList<String>();
        String word="",temp="";
        q.add(start);
        map.put(start,1);
        int curstep=0;
        while(q.isEmpty()==false){
            word=q.poll();
            curstep=map.get(word);
            if(word.compareTo(end)==0) break;
            for(int i=0;i<word.length();i++){
                for(int j=0;j<26;j++){
                    char m=(char)('a'+j);
                    temp=word.substring(0,i)+m+word.substring(i+1,word.length());
                    if(dict.contains(temp)&&!map.containsKey(temp)){
                        map.put(temp,curstep+1);
                        q.add(temp);
                    }
                }
            }
        }
            return map;
        }
 }


内容概要:《2024年中国物联网产业创新白皮书》由深圳市物联网产业协会与AIoT星图研究院联合编制,汇集了全国30多个省市物联网组织的智慧。白皮书系统梳理了中国物联网产业的发展历程、现状及未来趋势,涵盖了物联网的概念、产业结构、市场规模、投融资情况、面临的问题与机遇。书中详细分析了感知层、传输层、平台层及应用层的关键技术,探讨了智慧城市、智能工业、车联网、智慧医疗等九大产业物联网应用领域,以及消费物联网的发展特征与热门单品。此外,白皮书还关注了物联网数据安全、法规遵从、人才短缺等挑战,并提出了相应的解决方案。 适用人群:物联网从业者、企业决策者、政策制定者及相关研究机构。 使用场景及目标:①帮助从业者深入了解物联网产业的现状和发展趋势;②为企业决策者提供战略规划依据;③为政策制定者提供政策支持和法规制定参考;④为研究机构提供详尽的数据和案例支持。 其他说明:白皮书不仅限于技术科普,更从宏观角度结合市场情况,多维度讨论了物联网产业生态,旨在为物联网企业、从业者找到最适合的技术应用场景,促进产业健康发展。报告还特别鸣谢了参与市场调研的企业,感谢他们提供的宝贵行业信息。由于时间和资源的限制,报告可能存在信息不充分之处,欢迎各界人士提出宝贵意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值