查看: 1544| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

WordLadder running time comparison

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 will0688 于 2013-7-9 04:53 编辑

I rewrite the algorithm in java but mine is not able to finish large test while the other one could.
Are our running time different?
Original link http://discuss.leetcode.com/questions/1108/word-ladder

This is my solution in java
public class Solution {
    public int ladderLength(String start, String end, HashSet<String> dict) {
        if(start == end)    return 0;
        if(dict.size() == 0)    return 0;
        if(start.length() != end.length())  return 0;
        int len = start.length();

        int dis = 1;
        LinkedList<String> q = new LinkedList<String>();
        HashSet<String> visited  = new HashSet<String>();
        q.add(start);
        visited.add(start);

        while(!q.isEmpty()){

          dis++;
                LinkedList<String> nq = new LinkedList<String>(q);
                q = new LinkedList<String>();
                while(!nq.isEmpty()){
                        String word = nq.poll();
                        for(int i = 0; i < len; i++){
                            for(char j = 'a'; j<='z';j++){
                                    if(word.charAt(i) == j)        continue;
                                String nword = word.substring(0,i)+j+word.substring(i+1);
                                if(nword.equals(end))        return dis;
                        if(!dict.contains(nword))    continue;
                                if(visited.contains(nword))        continue;

                                q.add(nword);
                            visited.add(nword);
                            }
                        }
                }
        }
        return 0;   
   }
}

This is the other solution in c++.http://discuss.leetcode.com/questions/1108/word-ladder/1291
class Solution {
public:
int ladderLength(string start, string end, unordered_set<string> &dict) {
  // Start typing your C/C++ solution below
  // DO NOT write int main() function
  if(dict.empty()) return 0;
  int strLen = (*(dict.begin())).size();
  if(start.size()!=end.size() || start.size() != strLen) return 0;
  if(start==end) return 1;

  int shortestLen=1;
  queue<string> curr_queue;
  unordered_map<string, bool> visited;

  curr_queue.push(start);
  visited[start]=true;

  while(!curr_queue.empty())
  {
    shortestLen++;
    queue<string> new_queue;

    while(!curr_queue.empty())
    {
      string curr=curr_queue.front();
      curr_queue.pop();
      for(int pos=0; pos<strLen; pos++) //iterate all positions in the word
      {
        for(char c='a'; c<='z'; c++)    //iterate all possible chars
        {
          if(c==curr[pos]) continue;

          string newWord=curr;
          newWord.replace(pos,1,1,c);

          if(newWord==end) return shortestLen;

          if(dict.count(newWord)==0) continue; //not in dict
          if(visited.count(newWord)) continue; //already visited

          new_queue.push(newWord);
          visited[newWord]=true;
        }//for a-z
      }//for pos
    }//while
    curr_queue = new_queue; //proceed to the next depth/level
  }
  return 0;
}
};




上一篇:求前15分钟内出现了多少次代码,stata能做最好。
下一篇:请问一道project euler 上的算法题(用java)
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表