zoukankan      html  css  js  c++  java
  • Word Ladder

    这题的基本思路很轻易看懂,就是转换成图的中的最短路径问题。我一直出现TLE的错误,原因就在转换过程太复杂。

    可以遍历整个表,建立邻接表或者邻接矩阵。问题是这个过程就会是一个o(n^2)的过程。恰恰这道题又一个测试用例的词特别多,于是这个转换过程就行不通了。

    办法很简单,就是枚举每个词变化一个字母后可能出现的单词(复杂度:length X 26, length是单词的长度),然后看它在不在词典中。这是个笨办法,但是仔细一算,发现确实比O(n^2)算法要快不少。

    int ladderLength(string start, string end, unordered_set<string> &dict){
    	if (start == end)
    		return 0;
    	unordered_map<string, int> visited;
    	queue<string> qs;
    	qs.push(start);
    	string cur = start;
    	visited.insert(pair<string, int>(start, 1));
    	while (!qs.empty()){
    		cur = qs.front();
    		if (cur == end)
    			break;
    		qs.pop();
    		for (int i = 0; i < cur.size(); i++){
    			string newword = cur;
    			for (int j = 0; j < 26; j++){
    				newword[i] = 'a' + j;
    				if (dict.find(newword) != dict.end()
    					&& visited.find(newword) == visited.end()){
    					visited[newword] = visited[cur] + 1;
    					qs.push(newword);
    				}
    			}
    		}
    	}
    	if (visited.count(end) > 0)
    		return visited[end];
    	else
    		return 0;
    }
    

      

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4035443.html
Copyright © 2011-2022 走看看