127_Word Ladder

题目

Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

Only one letter can be changed at a time.
Each transformed word must exist in the word list. Note that beginWord is not a transformed word.
Note:

Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
You may assume no duplicates in the word list.
You may assume beginWord and endWord are non-empty and are not the same.
Example 1:

Input:
beginWord = “hit”,
endWord = “cog”,
wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]

Output: 5

Explanation: As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
return its length 5.
Example 2:

Input:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,“dot”,“dog”,“lot”,“log”]

Output: 0

Explanation: The endWord “cog” is not in wordList, therefore no possible transformation.

怎么搞呢
  1. 需要单词一个一个字符改变?

    可以循环解决:第一层循环:遍历单词第一个字符到最后一个字符,
    第二层循环:修改当前字符的,从a->z
    查找字典里有没有修改后的字母,有的话跳出,进行下一轮查找

  2. 网上说要使用 BFS 广度优先遍历,why?

    字典里找单词,怎么就成广度优先搜索了?

    这种情况使用BFS呢? 理解不了啊???

    再想想 BFS的经典套路,就是二叉树的层序遍历,遍历到第一个叶子结点,那么它的深度 也就是树的到叶子结点的最短深度

    现在要求的是也最短路径,遍历到第一个结果–》成功到达目标字符串,就是最短路径? 从例子看起:

    beginWord = “aot”,
    endWord = “cog”,
    wordList = [“hot” “got” “god” “cod” “cog”]

    amazing? 想一想,再想一想,emmmmm, hit 到 cog, 先将hit ,"" (空字符串)压入队列,这是零层,
    “” (空字符串)是每层的分隔字符串

    队列入队列层数
    ithot got “”一层
    ot无入队
    otgod cod “”二层
    odcod上一个已经被删了,所以这一波,无入队
    odcog,最终结果,bingo~三层

    这一波下来,不就是 广度优先搜索遍历么,层序遍历有木有, 其实我觉得自己想还是挺难想到的,代码里while中的两层for循环挺重要,每一波循环相当于把每一个位置上,修改一个字符且存在于字典的 单词都给放入的队列里。

class Solution {
public:
    int ladderLength(string start, string end, vector<string>& wordList) {
        unordered_set<string> dict(wordList.begin(), wordList.end());
        if (0 == start.size() || 0 == end.size()) return 0;
        if(dict.find(end) == dict.end()) return 0;
        queue<string> wordQ;
        wordQ.push(start);  // 先进先出   每一个单词 用""空字符串分隔
        wordQ.push("");
        int Path = 1;

        // 这样一波,怎么就保证是最短路径了?  
        //
        while (!wordQ.empty()) {
          string str = wordQ.front();
          wordQ.pop();

          if (str != "") {
            int len = str.size();
            // 这每一波循环,相当于把每一个位置上,修改一个字符且存在于字典的 单词都给放入的队列里
            for (int i = 0; i < len; i++) {
              char tmp = str[i];  //保存要修改的字符

              for (char c = 'a'; c <= 'z'; c++) {
                if (c == tmp)
                  continue;
                str[i] = c;
                if (str == end)
                  return Path + 1;
                if (dict.find(str) != dict.end()) {
                  wordQ.push(str);
                  dict.erase(str); // 一个单词只能用一次
                }
              }
              str[i] = tmp; //恢复要修改的字符
            }
          } else if (!wordQ.empty()) {
            Path++;
            wordQ.push("");
          }
        }
        return 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PLC(可编程逻辑控制器)是一种常见的自动控制系统。PLC使用一种特殊的编程语言,被称为类似于C语言的可视化编程语言,这种编程语言通常称为PLC Word。 PLC Word是一种高级编程语言,它具有结构化编程的特点,与C语言类似。它由一系列指令和函数构成,可以用于编写复杂的逻辑控制程序,用于控制各种工业设备和自动化过程。 PLC Word中的指令和函数包括条件语句、循环语句、输入输出控制语句等,可以用于实现各种自动化控制功能。通过使用PLC Word,工程师可以根据具体需求编写逻辑控制程序,并将其加载到PLC中,使其实现所需的控制功能。 与C语言相比,PLC Word更加注重实时性和可靠性,适用于需要高效稳定控制的工业自动化系统。此外,PLC Word还提供了丰富的调试功能,可以帮助工程师快速诊断和解决问题。 总之,PLC Word是一种类似于C语言的可视化编程语言,用于编写PLC的逻辑控制程序。通过PLC Word,工程师可以实现各种自动化控制功能,为工业自动化系统提供高效稳定的控制。 ### 回答2: PLC(可编程逻辑控制器)与C(编程语言)有着相应的对应关系。 PLC是一种特殊的计算机,用于实现工业自动化的控制。它的特点是功能强大、可靠性高,并且适用于工业环境中的各种应用。PLC主要通过控制输入输出信号来完成对设备、机器或生产线的控制。 与之对应的编程语言是C语言。C语言是一种通用的高级编程语言,常用于嵌入式系统的开发。通过C语言,开发人员可以编写代码控制PLC的操作。C语言具备灵活性和高效性,可以实现各种复杂的控制任务。 PLC和C语言的对应关系主要体现在PLC编程语言中的指令和C语言中的代码。PLC编程语言包括与C语言相似的结构,如顺序结构、选择结构和循环结构。PLC编程还可使用Ladder Diagram(梯形图)、Structured Text(结构化文本)等表示方法,与C语言中的代码类似。 同时,PLC编程中可以使用C语言库函数,通过调用这些函数来实现更复杂的功能。例如,可以使用C语言库函数来处理和操作数据、进行数学计算、进行字符串处理等。这使得PLC编程更加便捷和灵活。 总之,PLC和C语言之间的对应关系体现在PLC编程语言的指令和C语言代码的相似之处,以及PLC编程中可以使用C语言库函数的特点。这种对应关系使得开发人员能够更好地利用C语言的特性和功能,实现高效的PLC编程。 ### 回答3: PLC是Programmable Logic Controller的缩写,即可编程逻辑控制器。它是一种专门用于自动化控制的电子设备。而"C"这个词,在这里可以有两种可能的含义。 首先,"C"可以指代C语言。C语言是一种通用的高级程序设计语言,广泛应用于各种领域,包括嵌入式系统的开发。在PLC中,C语言可以用于编写用于控制和监测系统行为的程序。C语言提供了丰富的语法和库函数,使得开发者可以编写出高效、可靠的控制逻辑。 其次,"C"还可以指代操作码。在PLC的指令集中,操作码用于指示PLC执行不同的功能。操作码是PLC Word的一部分,用于定义要执行的特定操作,如读取输入、设置输出、执行算术运算等。PLC根据操作码的不同来执行相应的操作,从而实现系统的自动化控制功能。 总而言之,PLC Word和C之间的对应关系可以是指PLC中使用C语言进行程序设计,也可以是指PLC Word中的操作码与C语言中的指令的对应关系。无论是哪种情况,都可以帮助开发者实现系统的控制和监测功能,并提高自动化系统的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值