示例#1
0
 int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList) {
     if (beginWord == endWord) return 1;
     unordered_set<string> words1, words2;
     words1.insert(beginWord);
     words2.insert(endWord);
     wordList.erase(beginWord);
     wordList.erase(endWord);
     return ladderLengthHelper(words1, words2, wordList, 1);
 }
示例#2
0
 int ladderLengthHelper(vector<pair<string, int> >& start, vector<pair<string, int> >& end, unordered_set<string>& wordDict, unordered_map<string, bool>& sm, unordered_map<string, bool>& em) {
     if (start.size() > end.size())
         return ladderLengthHelper(end, start, wordDict, em, sm);
     if (start.size() == 0)
         return 0;
     int size = start.size();
     for (int i = 0; i < size; i++)
         wordDict.erase(start[i].first);
     for (int i = 0; i < size; i++) {
         pair<string, int> cur = start.front();
         start.erase(start.begin());
         vector<string> strSet = findStrSet(cur.first, wordDict);
         for (int j = 0; j < strSet.size(); j++) {
             if (em[strSet[j]])
                 return cur.second + end.back().second;
             sm[strSet[j]] = true;
             start.push_back(make_pair(strSet[j], cur.second + 1));
         }
     }
     return ladderLengthHelper(start, end, wordDict, sm, em);
 }
示例#3
0
    int ladderLengthHelper(unordered_set<string>& words1, unordered_set<string>& words2,
            unordered_set<string>& dict, int level) {
        if (words1.empty()) return 0;
        if (words1.size() > words2.size()) {
            return ladderLengthHelper(words2, words1, dict, level);
        }
        unordered_set<string> words3;

        for (auto it = words1.begin(); it != words1.end(); ++it) {
            string word = *it;
            for (char& c : word) {
                char tmp = c;
                for (c = 'a'; c <= 'z'; ++(c)) {
                    if (words2.find(word) != words2.end()) return level + 1;
                    else if (dict.find(word) != dict.end()) {
                        dict.erase(word);
                        words3.insert(word);
                    }
                }
                c = tmp;
            }
        }
        return ladderLengthHelper(words2, words3, dict, level + 1);
    }
示例#4
0
 int ladderLength(string beginWord, string endWord, unordered_set<string>& wordDict) {
     if (beginWord == endWord)
         return 1;
     wordDict.insert(beginWord);
     wordDict.insert(endWord);
     unordered_map<string, bool> sm;
     unordered_map<string, bool> em;
     for (auto it = wordDict.begin(); it != wordDict.end(); it++) {
         sm[*it] = false;
         em[*it] = false;
     }
     sm[beginWord] = true;
     em[endWord] = true;
     vector<pair<string, int> > start;
     vector<pair<string, int> > end;
     start.push_back(make_pair(beginWord, 1));
     end.push_back(make_pair(endWord, 1));
     return ladderLengthHelper(start, end, wordDict, sm, em);
 }