程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [Leetcode]Word Ladder

[Leetcode]Word Ladder

編輯:C++入門知識

題目:

 

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.

       

      解題思路:采用BFS搜索。每個節點采用pair表示,每個pair的第一個元素是字符串本身,第二個元素是所在層次。

       

      代碼:

       

      class Solution {
      public:
          int ladderLength(string start, string end, unordered_set &dict) {
              queue> WordCandidate;
              if(start.empty()||end.empty())return 0;
              int size=start.size();
              if(start==end)return 1;
              WordCandidate.push(make_pair(start,1));
              while(!WordCandidate.empty()){
                  pair CurrWord(WordCandidate.front());
                  WordCandidate.pop();
                  for(int i=0;i0){
                              WordCandidate.push(make_pair(CurrWord.first,CurrWord.second+1));
                              dict.erase(CurrWord.first);
                          }
                          swap(c,CurrWord.first[i]);
                      }
                  }
              }
          return 0;
          }
      };


       

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved