• LeetCoded第242题题解--java--数组


    数组

    数组的优点在于:

    • 构建非常简单
    • 能在 O(1) 的时间里根据数组的下标(index)查询某个元素(连续内存+对象指向数组下标0位置+index能够直接找到元素)

    而数组的缺点在于:

    • 构建时必须分配一段连续的空间
    • 查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数)
    • 删除和添加某个元素时,同样需要耗费 O(n) 的时间

    LeetCode 第 242 题:给定两个字符串 s 和 t,编写一个函数来判断 t 是否是 s 的字母异位词。
    说明:你可以假设字符串只包含小写字母。
    示例 1
    输入: s = “anagram”, t = “nagaram”
    输出: true

    示例 2
    输入: s = “rat”, t = “car”
    输出: false

    字母异位词,也就是两个字符串中的相同字符的数量要对应相等。例如,s 等于 “anagram”,t 等于 “nagaram”,s 和 t 就互为字母异位词。因为它们都包含有三个字符 a,一个字符 g,一个字符 m,一个字符 n,以及一个字符 r。而当 s 为 “rat”,t 为 “car”的时候,s 和 t 不互为字母异位词。
    解题思路
    一个重要的前提“假设两个字符串只包含小写字母”,小写字母一共也就 26 个,因此:

    1. 可以利用两个长度都为 26 的字符数组来统计每个字符串中小写字母出现的次数,然后再对比是否相等;
    2. 可以只利用一个长度为 26 的字符数组,将出现在字符串 s 里的字符个数加 1,而出现在字符串 t 里的字符个数减 1,最后判断每个小写字母的个数是否都为 0。

    示例代码第二种方式

    /**
     * @author myf
     */
    public class Solution {
        public static void main(String[] args) {
            System.out.println(((int) 'a'));
            System.out.println(isAnagram("myyifeng", "moyixue"));
        }
    
        public static boolean isAnagram(String s, String t) {
            int[] chars = new int[36];
            char[] s1 = s.toCharArray();
            char[] t1 = t.toCharArray();
            for (char s2 : s1) {
                chars[s2 - 'a']++;
            }
            for (char t2 : t1) {
                chars[t2 - 'a']--;
            }
            for (Integer ch : chars) {
                if (ch != 0) {
                    return false;
                }
            }
            return true;
        }
    }
    
    
  • 相关阅读:
    mui 上拉加载 实现分页加载功能
    CSS 实现自适应正方形
    CSS 实现垂直居中
    CSS 实现左侧固定,右侧自适应两栏布局的方法
    微信小程序 主题皮肤切换(switch开关)
    微信小程序 tabBar模板
    微信小程序 拼团商品倒计时(拼团列表、拼团商品详情)
    js时间操作getTime(),ios移动端真机上返回显示NAN
    微信小程序 使用wxParse解析html
    原生JavaScript轮播图的节流
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232498.html
Copyright © 2020-2023  润新知