zoukankan      html  css  js  c++  java
  • LeetCode(242):有效的字母异位词

    题目描述

    解题思路

    这道题目的本质 可以理解为 判断2个字符串中 各字符出现的次数是否一致

    方法一:数组

    我们可以通过js提供的几个方法,将原字符串整理成 排好序的字符串
    例如:"array"整理成"aarry"
    在这种情况下,只需比较2个字符串是否完全相同即可

    1、split方法
    用于将字符串分隔成字符串数组
    2、sort方法
    用于对字符串数组排序
    3、join方法
    用于将数组中的所有元素拼接成字符串

    方法二:哈希表

    利用js提供的Map对象,存储第一个字符串中 各个字母出现的次数
    然后再遍历第二个字符串
    若当前字符在Map中不存在,则直接返回false
    否则,则对当前字符对应的value值减一
    遍历结束后,判断Map对象是否为空
    若为空,则说明2个字符串中的字母及其出现次数是匹配的

    简单说明 Map 提供的几个常用方法
    .get(key)-返回key对应的value,若不存在,则返回undefined
    .set(key,value) -修改key对应的value
    .delete(key) -删除指定的key
    .size -哈希表的大小(key的个数)

    代码

    // 方法一
    var isAnagram = function(s, t) {
        if(s.length!==t.length){
            return false
        }
        
        var newS=s.split("").sort().join()
        var newT=t.split("").sort().join()
    
        return newS===newT
    };
    
    // 方法二
    var isAnagram = function(s, t) {
        if(s.length!==t.length){
            return false
        }
        
        const map=new Map()
        for(let i=0;i<s.length;i++){
            let count=map.get(s.charAt(i))
            if(count===undefined){
                map.set(s.charAt(i),1)
            }else{
                map.set(s.charAt(i),count+1)
            }
        }
    
        for(let i=0;i<t.length;i++){
            let count=map.get(t.charAt(i))
            if(count===1){
                map.delete(t.charAt(i))
            }else if(count===undefined){
                return false
            }else{
                map.set(t.charAt(i),count-1)
            }
        }
    
        if(map.size===0){
            return true
        }else{
            return false
        }
    };
    
  • 相关阅读:
    Android ANR 知多少
    电源管理
    功耗分析
    手机功耗测试
    Battery Historian
    Android 电量优化
    Android手机功耗
    功耗 Log 抓取要求规范
    Android 手机无法进入系统解决方案
    定屏死机问题操作指南
  • 原文地址:https://www.cnblogs.com/baebae996/p/13883569.html
Copyright © 2011-2022 走看看