有效的字母异位词

题目地址:https://leetcode-cn.com/problems/valid-anagram/

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

示例 1:

输入: s = "anagram", t = "nagaram"

输出: true

示例 2:

输入: s = "rat", t = "car"

输出: false

说明:

你可以假设字符串只包含小写字母。

进阶:

如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

解法一:Hash表

这题呢也是一个查找的一个操作,所以直接想到的就是hash表。两个字符串字母都一样就位置不一样,那就用Hash记录。最后key没有差别并且值相等就是异位词,两个值相等其实就换成是一个值等于0。用一个map完成

public boolean isAnagram(String s, String t) {
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
//长度都不一样直接走开
if (ss.length != tt.length) {
return false;
}
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < ss.length; i++) {
char c1 = ss[i];
char c2 = tt[i];
//统计如果是真的是异位词最后key值为0
map.put(c1, map.getOrDefault(c1, 0) + 1);
map.put(c2, map.getOrDefault(c2, 0) - 1);
}
//遍历表,不是异位词就有多也有少
for (int i = 0; i < map.size(); i++) {
if (map.get(tt[i]) != 0) {
return false;
}
}
return true;
}

解法二:数组

和以前解题一样用Hash表能做就要考虑一下可不可以用数组来做,用数组的局限是它是固定的。所以如果记录的key是固定的不多就可以用。这里也就是26个字母

public boolean isAnagram(String s, String t) {
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
//长度都不一样直接走开
if (ss.length != tt.length) {
return false;
}
int[] table = new int[26];
for (int i = 0; i < ss.length; i++) {
int c1 = ss[i] - "a";
int c2 = tt[i] - "a";
//统计如果是真的是异位词最后key值为0
table[c1]++;
table[c2]--;
}
//遍历表,不是异位词就有多也有少
for (int i = 0; i < 26; i++) {
if (table[i] != 0) {
return false;
}
}
return true;
}

解法三:排序

不就是位置不同嘛,排个序不就是相等字符串了,就不用统计字符串中的每个字符数量。不过排序最优也是才nlogn,所以并不优只是解这题比较简单直接,甚至可以直接一句返回

public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray();
char[] str2 = t.toCharArray();
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}

总结

总体来说解法二是最优的,但只限于当字符只是小写字母时,数组的解法确实是屡试不爽在key确定的情况下查找统计这类都可以用数组完成。其他两种解法就是通用的不限制字符,排序略优一点。

LeetCode初级算法之字符串:242 有效的字母异位词的更多相关文章

  1. leetcode.字符串.242有效的字母异位词-Java

    1. 具体题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注:判断两个字符串包含的字母是否完全一样. 示例 1: 输入: s = "anagram&q ...

  2. 前端与算法 leetcode 242. 有效的字母异位词

    目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...

  3. LeetCode 242. 有效的字母异位词(Valid Anagram)

    242. 有效的字母异位词 LeetCode242. Valid Anagram 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s ...

  4. Java实现 LeetCode 242 有效的字母异位词

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...

  5. 【LeetCode】242. 有效的字母异位词

    242. 有效的字母异位词 知识点:字符串:哈希表 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称  ...

  6. Leetcode 242.有效的字母异位词 By Python

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...

  7. leetcode No.242 有效的字母异位词 valid-anagram (Python3实现)

    题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram&q ...

  8. Leetcode 242.有效的字母异位词(Python3)

    题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...

  9. LeetCode 题解 | 242. 有效的字母异位词

    给定两个字符串 s 和t,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" 输出 ...

随机推荐

  1. centos6 安装 terminator

    yum install terminator 报错: No package terminator available. 解决: yum install epel-release 报错 Cannot r ...

  2. Notepad++安装教程

        1.官网下载 官方网站:https://notepad-plus-plus.org/downloads/ 上面有历史版本,一般就选择最新版下载 2.安装 [3]打开记事本进行设置: 设置--& ...

  3. 统计数字问题(Java)

    Description 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数字计数问 ...

  4. Redis安全学习

    Redis安全学习 一直在听SSRF打Redis,那Redis到底是啥,正式的认真学习一下. 1.Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvat ...

  5. java开发两年,连这些多线程知识都还没掌握,你凭什么涨薪!

    并发与并行 并发:两个或者多个事件在同一时间段发生(交替执行) 并行:两个或者多个事件在同一时刻发生(cpu多核.同时执行) 线程与进程 进程:是一个内存中运行的应用程序,有自己独立的内存空间,一个应 ...

  6. 硕思logo设计师注册码去哪里找

    硕思logo设计师注册码去哪里找呢?当然是硕思logo设计师官网啦! 最近小编总是会被网友们咨询关于logo设计的问题,其中很多网友并不是专业的设计人员,特别是一些设计公司面对新手设计时,往往会不知所 ...

  7. 微课制作软件Camtasia中如何添加并编辑字幕?

    除了能录制视频以外,Camtasia还能直接把录制下来的视频进行剪辑,并添加视频字幕等等一些后期效果.今天我们就来看一看字幕的添加方法. 导入视频 微课制作软件Camtasia录制的视频,默认在软件& ...

  8. ResNet模型

    ReeNet论文地址:Deep Residual Learning for Image Recognition Resnet的两种不同结构 上图左边的结构主要是针对深度较少的网络,当深度较大时则用右边 ...

  9. leetcode133. 克隆图

    给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]).示例: 输入:{"$id":&quo ...

  10. 【P4178】Tree——点分治

    (题面来自luogu) 题目描述 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K 输入格式 N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 ...