当前位置:   article > 正文

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

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

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。

一、题目

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
在这里插入图片描述

二、思路

①若 s 和 t 互为字母异位词,则s.length()一定等于t.length()。
②若 s 和 t 互为字母异位词,则 s 和 t 中每个字符出现的次数都相同。
如果我们能抓住这两个特点,那么问题就很好解决了。我们可以使用跟【389. 找不同】一样的思想:

  1. 创建一个长度为26个的int[ ]数组,用来代表a~z这26个英文字母。
  2. 遍历字符串 s ,在这个数组中给字符串 s 中的每个字符的值都+1。
  3. 遍历字符串 t ,在这个数组中给字符串 t 中的每个字符串的值都-1。
  4. 若出现数组array中某一个元素的值小于0,那么就说明字符串s中所有的字符个数与字符串t中所有的字符个数不相等。也就是说字符串s和字符串t存在不同的字符,所以他们一定不互为字母异位词。

三、解决方案

语言:Java
执行耗时:3 ms
内存消耗:41.7 MB

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

        if (s.length() != t.length()) {
            return false;
        }

        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            array[ch - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            char ch = t.charAt(i);
            array[ch - 'a']--;
            if (array[ch - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/561199
推荐阅读
相关标签
  

闽ICP备14008679号