【LeetCode 127】ワードラダー

件名の説明:

二つの単語と単語のリストに、各変換は、唯一の文字を変更することができ、かつ唯一の単語リストに単語を変更しました。Q.どのように何回も変換の最小値、beginwordはendwordになることができます。

アイデア:

BFS。リスト内の単語は、キューに参加する場合は、単語の各文字は、変換の26種類を試してみます。
タイムアウトした、後で直接削除ベクトルを表示されている各単語のために、設定するように変更します。検索は、その後の前に、時間を節約できます。
BFSの方法は、まずそのステップの最小数を見つける必要があります。

コード:

class Solution {
public:
    int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
        set<string> st(wordList.begin(), wordList.end());
        map<string, int> mp;
        mp[beginWord] = 1;
        queue<string> que;
        que.push(beginWord);
        st.erase(beginWord);
        int len = beginWord.length();
        
        while(!que.empty()) {
            string cur = que.front();
            que.pop();
            if (cur == endWord) return mp[endWord];
            for (int i=0; i<len; ++i) {
                string nxt = cur;
                for (int j=0; j<26; ++j) {
                    nxt[i] = 'a' + j;
                    if (st.count(nxt) && !mp[nxt]) {
                        mp[nxt] = mp[cur] + 1;
                        que.push(nxt);
                        st.erase(nxt);
                    } 
                } 
            }
        }
        return mp[endWord];
    }
};

今週はBFS週間になります。
実際に、私はBFSを達成したいとキューとスタックの問題をDFS。

おすすめ

転載: blog.csdn.net/iCode_girl/article/details/92695773