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;
    }
    

      

  • 相关阅读:
    码云的安装和配置
    Python解释器安装教程和环境变量配置
    Python基础学习
    buuctf CheckIn
    各种小马收集
    buuctf Easysql 小记
    locust
    封装好的日志模块
    实用的测试网站
    列表操作
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4035443.html
Copyright © 2011-2022 走看看