当前位置: 首页 > news >正文

DAY 33 leetcode 383--哈希表.赎金信 49--字母异位词分组

题号383

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

class Solution {
    public boolean canConstruct(String r, String m) {
        HashMap<Character, Integer> dic=new HashMap<>();//创建哈希表
        int r_size=r.length();
        int m_size=m.length();
        for(int i=0;i<m_size;i++){
            dic.put(m.charAt(i),dic.getOrDefault(m.charAt(i),0)+1);
        }//先对m操作
        for(int i=0;i<r_size;i++){
            dic.put(r.charAt(i),dic.getOrDefault(r.charAt(i),0)-1);
        }//再将r中的元素减去
        for(int val:dic.values()){
            if(val<0)//若有负数出现则说明出现了其他字符
            return false;
        }
        return true;
    }
}

题号49

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

我的写法

大致思路:创建一个哈希表,key是计数数组生成的字符串,values是strs[i],则可以将计数数组相同的字符串放在同一列表下,但是这种方法时间复杂度高

import java.util.*;

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        int n = strs.length;
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            // 不能直接用数组作为键,使用计数数组生成的字符串作为键
            String key = Arrays.toString(count(strs[i]));
            List <String> list=map.getOrDefault(key,new ArrayList<String>());
            //如果存在key 则返回与该键关联的 List<String>
            //如果不存在,则返回一个新的 ArrayList<String> 实例
            list.add(strs[i]);
            map.put(key,list);
        }
        // 返回包含所有列表的列表
        return new ArrayList<List<String>>(map.values());
    }

    public int[] count(String s) {
        int[] arr = new int[26];
        int size = s.length();
        for (int i = 0; i < size; i++) {
            arr[s.charAt(i) - 'a']++;
        }
        return arr;
    }
}

http://www.dtcms.com/a/104554.html

相关文章:

  • 如何本地部署RWKV-Runner尝鲜CPU版
  • odrive环境构筑问题
  • R语言绘图 | 使用scplotter包绘制细胞间通信图
  • 【超详细】一文解决更新澎湃2.0后LSPose失效问题
  • STM32 FATFS - 在flash上运行fatfs
  • 文章记单词 | 第15篇(六级)
  • Java笔记2——编程基础
  • 高效内存位操作:如何用C++实现数据块交换的性能飞跃?
  • STM32技能综合巩固
  • 使用 Vue 重构 RAGFlow 实现聊天功能
  • 第十二届蓝桥杯省赛软件类(cc++组)
  • 一场国际安全厂商的交流会议简记
  • 移动端浏览器调用摄像头失败,需要https,配置开发环境证书
  • 尚硅谷2019版Java异常处理篇笔记记录
  • Ranger一分钟
  • 步进电机控制频率解析:500 Hz 还是 500×256 Hz?
  • 基于大模型的房间隔缺损手术全流程预测与方案优化研究报告
  • 【56】数组指针:指针穿梭数组间
  • Python数据类型-list
  • 传统汽车 HMI 设计 VS 新能源汽车 HMI 设计,有何不同?
  • Spring Boot向Vue发送消息通过WebSocket实现通信
  • 解决ubuntu18.04无法进入系统桌面
  • 【文献阅读】Vision-Language Models for Vision Tasks: A Survey
  • Spark,HDFS概述
  • Android7 Input(三)EventHub
  • HTTP响应数据包全面解析:结构、原理与最佳实践
  • [GESP202503 C++六级题解]:P1196:环线
  • 基于Vue的低代码可视化表单设计器 FcDesigner 3.2.11更新说明
  • latex下载软件
  • 蓝桥杯准备(前缀和差分)