zoukankan      html  css  js  c++  java
  • 字符串状态转换 【最短路径】

    题目描述
    给定两个单词(初始单词和目标单词)和一个单词字典,请找出所有的从初始单词到目标单词的最短转换序列的长度:
    每一次转换只能改变一个单词
    每一个中间词都必须存在单词字典当中
    例如:
    给定的初始单词start="red",
    目标单词end ="tax"。
    单词字典dict =["ted","tex","red","tax","tad","den","rex","pee"]
    一个最短的转换序列为"red" -> "ted" -> "tad" -> "tax",
    返回长度4

    注意:
    如果没有符合条件的转换序列,返回0。
    题目中给出的所有单词的长度都是相同的
    题目中给出的所有单词都仅包含小写字母

    
    
    #define dist second
    #define str  first
    typedef pair<string,int> State;
    class Solution {
    public:
        int ladderLength(string start, string end, unordered_set<string> &dict) {
            if(start==end) return 0;
            queue<State> q;
            q.push({start,0});
    //         unordered_map<string,int> _map;
            while (q.size()) {
                auto state = q.front();q.pop();
                string s = state.str;int dist = state.dist;
                if(s==end) {
                    return dist+1;//搜索到终点
                }
                if(!dict.count(s)) continue;
                dict.erase(s);
                for(int i=0;i<s.size();++i) {
                    for(int j='a';j<='z';++j) {
                        if(s[i]==j) continue;
                        char pre = s[i];s[i]=j;
                        if(dict.count(s)) {
                            q.push({s,dist+1});
                            //去重 减枝
    //                         dict.erase(s);
                            
                        }
                        //还原状态
                        s[i] = pre;
                    }
                }
                
            }
            return 0;
        }
        
        
        
    };
    
    
    
  • 相关阅读:
    Python 7步机器学习
    STL容器-- map and multimap 用法
    STL容器-- forward_list 用法
    STL容器-- fixed-size array 用法
    STL容器-- deque 用法
    网站502与504错误分析
    git将一个分支的某个文件合并到当前分支
    阿里云RDS上用mysqldump导入导出
    mysqldump具体应用实例
    mysql的导入导出工具mysqldump命令详解
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/14325222.html
Copyright © 2011-2022 走看看