zoukankan      html  css  js  c++  java
  • 05_02_leetcode_242_有效的字母异位

    1.题目描述

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

    示例 1:

    输入: s = "anagram", t = "nagaram"
    输出: true
    示例 2:

    输入: s = "rat", t = "car"
    输出: false

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-anagram

    2.思路讲解

    1)hash存储字母和对应次数。遍历s,把字母和对应出现的总次数存入hash表,遍历t,若字母存在hash表中,对应字母次数减一,若字母不存在hash表中,匹配失败。遍历hash表,若所有字母的个数都为空,则匹配成功,否则匹配失败。

    时间复杂度:O(len(s))+O(len(t))+O(len(hash)),因为遍历s和t的时候,需要每次遍历hash表的键值,增加了时间复杂度

    空间复杂度:O(len(hash))

    2)先对字符串排序,在比较是否相等

    时间复杂度:O(nlog(n))+ O(n)

    空间复杂度:为s和t创建char数组

    3.我的代码

    1)hash表

    public boolean isAnagram(String s, String t) {
            // 1.创建hash表
            Map<Character, Integer> map = new HashMap<>();
            // 2.遍历s把字母对应个数插入
            for (int i = 0; i < s.length(); i++) {
                // 查看hash表中是否存在当前字母,如果不存在,就插入该字母;就把当前字母加一
                if (map.containsKey(s.charAt(i))) {
                    int num = map.get(s.charAt(i));
                    map.put(s.charAt(i), ++num);
                } else {
                    map.put(s.charAt(i), 1);
                }
            }
            // 3.遍历t如果字母在hash表中,就个数减一,如果不在hash表中,返回false
            for (int i = 0; i < t.length(); i++) {
                if (map.containsKey(t.charAt(i))) {
                    int num = map.get(t.charAt(i));
                    num--;
                    map.put(t.charAt(i), num);
                } else
                    return false;
    
            }
            // 4.检测hash表是否为0值,如果是返回true,不是返回false
            for (Character key : map.keySet()) {
                int num = map.get(key);
                if (num != 0)
                    return false;
            }
            return true;
    
        }

    2)先对字符串排序,再比对两个排序后的字符串是否相等

    public boolean isAnagram(String s, String t) {
    
            if (s.length() != t.length())
                return false;
            char[] str1 = s.toCharArray();
            char[] str2 = t.toCharArray();
            Arrays.sort(str1);
            Arrays.sort(str2);
            return Arrays.equals(str1, str2);
        }

    4.金牌思路

    写法很多

  • 相关阅读:
    JMeter怎样测试WebSocket
    Android—基于OpenCV+Android实现人脸检测
    Android—实现科大讯飞语音合成
    Could not resolve com.android.support.constraint:constraint-layout:1.1.3.
    Mac上利用Aria2加速百度网盘下载
    将Excel表中的数据导入MySQL数据库
    Android Studio 添加模块依赖
    Mac上基于hexo+GitHub搭建个人博客(一)
    微信小程序—setTimeout定时器的坑
    微信小程序-腾讯地图显示偏差问题
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14612596.html
Copyright © 2011-2022 走看看