有效的字母异位词
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母
code
方法一
对字符数据进行排序,然后逐个比较字符是否相同。时间复杂度O(n*logn), 因为有排序操作,可以进行优化
public boolean isAnagram(String s, String t) {
byte[] bytess = s.getBytes();
byte[] bytest = t.getBytes();
Arrays.sort(bytess);
Arrays.sort(bytest);
if (bytess.length != bytest.length) {
return false;
}
看别人的题解中 这里使用arrays.equal()方法,效率更高
for (int i = 0; i < bytess.length; i++) {
if(bytess[i] != bytest[i]){
return false;
}
}
return true;
}
方法二
不进行排序,只要比较两个字符串中对应字符的个数都是相同的,进行优化:优化后时间复杂度 O(n)
class Solution {
public boolean isAnagram(String s, String t) {
// 先记录一个字符串的 对应字符的个数,另一个字符串相减,如果不等于0 ,代表字符对应不同
//
char[] c = new char[26];
for (byte b : s.getBytes()) {
c[b-'a'] ++;
}
for (byte b : t.getBytes()) {
c[b-'a']--;
}
for (char c1 : c) {
if (c1 != 0) {
return false;
}
}
return true;
}
}