Algorithm

题目

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。242 valid anagram

题目解答

可以使用先排序后判断的方法来实现,这样的时间复杂度为O(nlog(n))。更好的方法是借助Hash表来实现,可以达到O(n)的时间复杂度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ValidAnagram {
    public boolean isAnagram(String s, String t) {

        if (null == s || null == t || s.length() != t.length()) {
            return false;
        }

        Map<Character, Integer> map = new HashMap<>();
        final char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            final char key = s.charAt(i);
            map.put(key, map.getOrDefault(key, 0) + 1);
            final char key1 = t.charAt(i);
            map.put(key1, map.getOrDefault(key1, 0) - 1);
        }

        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (0 != entry.getValue()) {
                return false;
            }
        }
        return true;
    }
}

Review

你可能不知道的SHELLCoolShell左耳朵耗子2012年的关于强大Shell的文章,里面列出了很多有用的命令,看完后收获颇丰。针对实际使用场景,列出我认为暂时可以直接使用的一些操作命令。

!$

上一条命令的最后一个参数

!!

重新执行上一条命令,类似的!curl可以执行上次最近一次的curl命令。现在的情况是使用fzf/c+r等工具来实现,但是对于服务器上未安装这些命令,这种原生支持的命令就非常有用了。

Alt+. 或者Esc .

把上次的命令参数重复显示出来,目前看使用Alt+.较多。

^old^new

这个命令是替换上一条执行语句的字符或者字符串,对于长的拼写错误有很大帮助。

> file.txt

创建一个文件并可输入内容,比touch快。

man ascii

不用google查询了,本地就有的,真的是有事没事请找man。

tail -f path/to/file.log | sed ‘/^Finished: SUCCESS$ q’

当file.log出现Finished: SUCCESS就退出,用于实时过滤日志是否出现某条记录。

curl ifconfig.me

当机器在内网时,可以使用此命令来查看外网信息。

vim scp://username@host//path/to/somefile

vim对远程文件进行编辑

python -m SimpleHTTPServer

一句话实现对当前目录的Http服务,直接使用localhost:8000来进行访问了,这个确实厉害,相见恨晚。

真正的操作了一下,才体会到命令行的强大,要好好学习了。

Tip

使用Surfingkeys时,也可以设置kj为进入到normal模式。具体配置为

1
imap('kj', '<Esc>');

Share

过去66年的66个发明创造文章中显示了近66年每一年中改变人类的最有意义发明,主要体现在医疗与工业领域。操作系统,特斯拉,无人机,登月车,蓝牙,万维网,地图,虚拟现实,3D打印,当然还有伟大的Iphone。