LeetCode150道面试经典题-- 有效的字母异位词(简单)

1.题目

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

注意:若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

2.示例

s="adasd"

t="daads"

返回true

s="addad"

t ="adddt"

返回true

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母

3.思路

统计字符:
首先可以通过统计两者的每一个字符出现的次数进行统计,然后通过遍历两者26个字母判断是否都能相等,如果都能相等则返回true否则为false

4.代码

LeetCode代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        int count_s[] = new int[26];
        int count_t[] = new int[26];

        for (char s_index:s.toCharArray()) {
            count_s[s_index-'a']++;
        }
        for (char t_index:t.toCharArray()) {
            count_t[t_index-'a']++;
        }

        for (int i=0;i<26;i++){
            if (count_s[i]!=count_t[i]){
                return false;
            }
        }
        return true;
    }
}

 可以看到内存管理并不理想,所以可以尝试将两个数组结合起来变成一个数组,即为累加数组,在s数组中累加,在t数组中累减。最后通过数组内的元素是否有不为0的元素来判断返回值

改良后代码:
 

class Solution {
    public boolean isAnagram(String s, String t) {
        int sum[] = new int[26];
        for (char s_index:s.toCharArray()) {
            sum[s_index-'a']++;
        }
        for (char t_index:t.toCharArray()) {
            sum[t_index-'a']--;
        }
        for (int i=0;i< sum.length;i++){
            if (sum[i]!=0){
                return false;
            }
        }
        return true;
    }
}

详细案例代码:

package LeetCode15_1;

public class javaDemo {
    public static void main(String[] args) {
        String s = "rat";
        String t = "car";
        boolean flag = false;
//        创建唯一累加数组
        int sum[] = new int[26];
//        遍历s,统计s所有字母的出现次数
        for (char s_index:s.toCharArray()) {
            sum[s_index-'a']++;
        }
//        遍历t,减去t所有字母出现的次数
        for (char t_index:t.toCharArray()) {
            sum[t_index-'a']--;
        }
//        如果两者出现次数都一样,那么数组元素应该全是0
        for (int i=0;i< sum.length;i++){
            if (sum[i]!=0){
                flag = false;
                break;
            }
        }
        System.out.println(flag);
    }
}

 会了?试试挑战下一题!♪(^∀^●)ノシ (●´∀`)♪

LeetCode150道面试经典题-- 两数之和(简单)_Alphamilk的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/dogxixi/article/details/132257980
今日推荐