[杨小白]_leetcode_力扣第一次周赛ak!!90场双周赛第二题

236 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

前言

小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!

力扣第 90 双场周赛-力扣

力扣第 90 双场周赛-力扣

啊啊啊啊!!!ak了!从7月21开始做力扣依赖,三个月多月了,第一次ak,确实还是很激动的。

第四题有点瞎猫碰死耗子的缘分在里面,暴力加一点点优化,没想到最后过了。不知道力扣卡时间是3s还是2s,我提交三次都在1950ms左右,不知道会不会有可能不过。

最后12秒压线提交通过,可真是泪目了!!!基本是ak的守门员了。

今天的四道题,前三道,都一看就有思路,第四题确实想不通,不是没思路,而是想不通,应该得用单调栈、堆来做,但是就是想不到具体的实现。

image.png

2452. 距离字典两次编辑以内的单词

给你两个字符串数组 queries 和 dictionary 。数组中所有单词都只包含小写英文字母,且长度都相同。

一次 编辑 中,你可以从 queries 中选择一个单词,将任意一个字母修改成任何其他字母。从 queries 中找到所有满足以下条件的字符串:不超过 两次编辑内,字符串与 dictionary 中某个字符串相同。

请你返回 queries 中的单词列表,这些单词距离 dictionary 中的单词 编辑次数 不超过 两次 。单词返回的顺序需要与 queries 中原本顺序相同。

示例 1

输入:queries = ["word","note","ants","wood"], dictionary = ["wood","joke","moat"]

输出:["word","note","wood"]

解释:

  • 将 "word" 中的 'r' 换成 'o' ,得到 dictionary 中的单词 "wood" 。
  • 将 "note" 中的 'n' 换成 'j' 且将 't' 换成 'k' ,得到 "joke" 。
  • "ants" 需要超过 2 次编辑才能得到 dictionary 中的单词。
  • "wood" 不需要修改(0 次编辑),就得到 dictionary 中相同的单词。 所以我们返回 ["word","note","wood"] 。

示例 2

输入:queries = ["yes"], dictionary = ["not"]

输出:[]

解释: "yes" 需要超过 2 次编辑才能得到 "not" 。 所以我们返回空数组。

提示

  • 1 <= queries.length, dictionary.length <= 100
  • n == queries[i].length == dictionary[j].length
  • 1 <= n <= 100
  • 所有 queries[i] 和 dictionary[j] 都只包含小写英文字母。

代码

算一下暴力的时间复杂度,因为单词嘴都有100个,每个单词最长100个字母,暴力的话就是100*100*100,最多10e6,所以暴力就可以过。

如果在10e7,暴力就有点悬了,一般要在进一步优化一下。

暴力做法:每个单词和词典中的对比每个字母,计算不一样的字母个数,人工小于等于2,说明符合。

class Solution {
    public List<String> twoEditWords(String[] queries, String[] dictionary) {
        List<String> res = new ArrayList<>();
        for (int i = 0; i < queries.length; i++) {
            for (int j = 0; j < dictionary.length; j++) {
                String query = queries[i];
                String s = dictionary[j];
                int time = 0;
                for (int k = 0; k < query.length(); k++) {
                    int t = query.charAt(k) - s.charAt(k);
                    if (t != 0) {
                        time++;
                        if (time == 3) {
                            break;
                        }
                    }
                }
                if (time <= 2) {
                    res.add(query);
                    break;
                }
            }
        }
        return res;
    }
}

3.结束

上大分!上大分!!!开心,第一次ak,希望今年还有两个月能再ak个一次两次,现在1698分,希望今年能到1800!