题目:
给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。
注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)。
leetcode题目连接:力扣
分析:
该题解法可以参考题014.字符串中的变位词
该题需要注意,两个词的顺序要不完全相同,如果相同则不是变位词
本题解法与题014稍有不同的点在于只建立了一个数组,第一个字符串遍历之后得到数组a,第二个字符串遍历时每个元素减一,如果第二个字符串与第一个字符串不完全相同,则一定会有第一个字符串不存在的元素,因此一定会得到<0的情况,只要判断这种情况即可
Java代码实现:
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length() || s.equals(t)){
return false;
}
int[] a = new int[26];
for(int i = 0; i < s.length(); i++){
a [s.charAt(i)-'a']++;
}
for(int j = 0; j < t.length(); j++){
a[t.charAt(j)-'a']--;
if(a[t.charAt(j)-'a'] < 0){
return false;
}
}
return true;
}
}
复杂度分析:
时间复杂度:O(m+n),扫描了s和t各一次
空间复杂度:O(1),建立了一个长度为26的数组,不会随输入字符串长度变化而变化
代码执行结果:
以上为个人做题笔记,很多是自己的理解,若有错误还请各位大佬指出~