P209 变位词校验
算法 18 阅读
信号摘要
难度:Easy · 时长:07:08 · leetcode 242 · lintcode 158
未对外公开播放权限
点击查看说明
描述
这个题目说的是,给你两个字符串 s 和 t,你要写函数判断 t 是否为 s 的一个变位词。
其中,字符串只由小写字母组成。变位词指的是使用相同字母以不同顺序构成的单词。
比如说,给你的字符串 s 和 t 是:s = "eat" t = "tea"
这两个字符串都是由 a/e/t 这三个字母构成,因此 t 是 s 的一个变位词。
如果 s 和 t 改成:
s = "eat" t = "ten"
"ten" 中的字符 n 不存在于字符串 s 中。因此,它不是 s 的一个变位词。
相关视频:变位词分组,查找字符串中所有变位词
代码
public class AlgoCasts {
// Time: O(n*log(n)), Space: O(n)
public boolean isAnagramSort(String s, String t) {
if (s == null || t == null || s.length() != t.length()) return false;
char[] sc = s.toCharArray();
char[] tc = t.toCharArray();
Arrays.sort(sc);
Arrays.sort(tc);
for (int i = 0; i < sc.length; ++i)
if (sc[i] != tc[i])
return false;
return true;
}
// Time: O(n), Space: O(1)
public boolean isAnagramCount(String s, String t) {
if (s == null || t == null || s.length() != t.length()) return false;
int[] counts = new int[26];
for (int i = 0; i < s.length(); ++i) {
counts[s.charAt(i) - 'a']++;
counts[t.charAt(i) - 'a']--;
}
for (int i = 0; i < 26; ++i)
if (counts[i] != 0)
return false;
return true;
}
}