📣 独立日限时特惠: VIP通行证立减$68
查看: 2448| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 请问Word Ladder 1 和 2的时间空间复杂度分别是多少?

全局:

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

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

x

Word Ladder
public class Solution {
    public int ladderLength(String beginWord, String endWord, Set<String> wordList) {
        Queue<String> q = new LinkedList<>();
        q.add(beginWord);
        wordList.remove(beginWord);
        int level = 1;
        while(!q.isEmpty()){
            int size = q.size();
            for(int i = 0; i < size; i++){
                String s = q.remove();
                for(int j = 0; j < s.length(); j++){
                    for(char c = 'a'; c <= 'z'; c++){
                        char[] cc = s.toCharArray();//start from the original string
                        cc[j] = c;
                        String next = new String(cc);
                        if(next.equals(endWord)){
                            return level + 1;
                        }else if(wordList.contains(next)){
                            q.add(next);
                            wordList.remove(next);
                        }
                    }
                }
            }
            level++;
        }
        return 0;
    }
}

Word Ladder 2

public class Solution {
    HashMap<String, Integer> map = new HashMap<>();
    List<List<String>> res = new ArrayList<>();
    List<String> list = new ArrayList<>();
    public List<List<String>> findLadders(String beginWord, String endWord, Set<String> wordList) {
        getDistanceFromBegin(beginWord, endWord, wordList);
        helper(beginWord, endWord);
        return res;
    }
    public void helper(String beginWord, String endWord){
        if(endWord.equals(beginWord)){
            List<String> cur = new ArrayList<>(list);
            cur.add(beginWord);
            Collections.reverse(cur);
            res.add(cur);
            return;
        }
        list.add(endWord);
        for(int i = 0; i < endWord.length(); i++){
            for(char c = 'a'; c <= 'z'; c++){
                char[] cc = endWord.toCharArray();
                cc[i] = c;
                String pre = new String(cc);
                if(map.containsKey(pre) && map.get(pre) + 1 == map.get(endWord)){
                    helper(beginWord, pre);
                }
            }
        }
        list.remove(list.size() - 1);
    }
    public void getDistanceFromBegin(String beginWord, String endWord, Set<String> wordList){
        Queue<String> q = new LinkedList<>();
        q.add(beginWord);
        wordList.remove(beginWord);
        int level = 1;
        map.put(beginWord, level);
        while(!q.isEmpty()){
            int size = q.size();
            for(int i = 0; i < size; i++){
                String s = q.remove();
                for(int j = 0; j < s.length(); j++){
                    for(char c = 'a'; c <= 'z'; c++){
                        char[] cc = s.toCharArray();//start from the original string
                        cc[j] = c;
                        String next = new String(cc);
                        if(next.equals(endWord)){
                            map.put(next, level + 1);
                            return;
                        }else if(wordList.contains(next)){
                            q.add(next);
                            wordList.remove(next);
                            map.put(next, level + 1);
                        }
                    }
                }
            }
            level++;
        }
    }
}


上一篇:二叉树有个指针错了,如何找到这个错误的指针
下一篇:if &quot;(i &gt; cur &amp;&amp;nums[i] == nums[i-1]) continue;
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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