【letcode-c++】242有效的字母异位词与49字母异位词分组

news2024/11/14 2:49:29

一、242 有效的字母异位词

(1)题目

这里是引用

(2)知识点–哈希

【这一段总结来自于代码随想录的讲解学透哈希表

哈希的优势是可以实现快速查找,它非常适合应用与查找某一个元素是否在一个集合中出现。
哈希有三种实现形式:

  1. 数组: 一般应用于要查找的元素只有一个,且连续且值不是很多的情况,比如这一题,要匹配的是26个字母,ASCII码是连续的,那就非常适合使用哈希数组
  2. set: 一般应用于要查找的元素只有一个,但值比较分散且很多的情况,
  3. map:一般应用于要关注的元素有两个,比如 49题

(3)解题思路与代码

class Solution {
public:
    bool isAnagram(string s, string t) {

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

        //创建一个长度为26的数组初始化为0,将a-z映射为0-25的数组下标
        //那么当s中每出现一个字母,就在映射的下标位置上的值+1
        //然后在遍历t,每出现一个字母,就在映射的下标位置上的值-1
        //最后,再判断数组,如果每一个位置的值都为0,说明每个字符出现的字符都相同,是字母异位词

    
        int n[26]={0};
        for(int i=0;i<s.length();i++){
            //字母相减会自动进行ASCII码相减
            n[s[i]-'a']++;
        }
        for(int i=0;i<t.length();i++){
            //字母相减会自动进行ASCII码相减
            n[t[i]-'a']--;
        }
        for(int i=0;i<26;i++){
            if(n[i]!=0) return false;
        }

        return true;


    }
};

二、49 字母异位词分组

(1)题目

这里是引用

(2)分析

这一题感觉是上一题的进阶版,不再是两个数组比较,而是多个数组进行比较和分组,那么再使用哈希数组就不是那么方便了。考虑到字母异位词排序之后是相同的,那么就考虑使用哈希map,将排序后的字符串作为key,排序前的字符串放到vector中,再将这个vector作为map的value,这样遍历一轮之后,所有的字符串都会根据key进入到字母异位词的vector里边了。

(3)代码

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> ans;
        if(strs.empty()) return ans;
        if(strs.size()==1){
            ans.push_back(strs);
            return ans;
        } 
       //创建一个哈希map
       //对每一个字符串进行排序,将排序后的字符串作为key,排序前的字符串作为value放到map中
       //这样每出现一个字符串,先排序,在map中查找,找到了,就将原串添加到value中
       //如果没找到,就在map中新建一项
       //这样结束之后,所有的字符串都被归类了 
        unordered_map<string,vector<string>> strsMap;
        for(int i=0;i<strs.size();i++){
            string str=strs[i];
            sort(str.begin(),str.end());  //排序
            auto it=strsMap.find(str);
            if(it!=strsMap.end()){
                //找到了
                (it->second).push_back(strs[i]);
            }else{
                vector<string> a;
                a.push_back(strs[i]);
                strsMap.insert(pair<string,vector<string>>(str,a));
            }
        }
        
        for(unordered_map<string,vector<string>>::iterator it=strsMap.begin();it!=strsMap.end();it++){
            ans.push_back(it->second);
        }
        return ans;
    }

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arduino程序-模拟输入(基础知识)

arduino程序-模拟输入&#xff08;基础知识&#xff09; 1-28 模拟输入1 - 学用电位器电位器电位器实际应用Arduino如何接电位器 1-29 模拟输入2-analogRead演示效果示例程序&#xff1a;干扰问题AnalogRead&#xff08;&#xff09; 1-30 模拟输入3-电位器控制LED亮度实验演示…

自定义封装日历组件

自定义日历 工作需要&#xff0c;但现有框架封装的日历无法满足需求&#xff0c;又找不到更好的插件&#xff0c;所以准备自己封装一个。 效果图和说明 一个很简易版的demo日历&#xff0c;本文只提供最基本的功能代码&#xff0c;便于阅读二开。 新建calendar.vue文件 <…

【小技巧】CSS如何实现文字溢出显示省略号

文章目录 文字溢出显示省略号设置伪类实现全称展示 文字溢出显示省略号 在列表项或者导航菜单中&#xff0c;经常会在列表项或导航菜单中&#xff0c;由于空间有限&#xff0c;当文本内容较长时&#xff0c;可以使用省略号显示文本已被截断。 CSS中文字溢出显示省略号&#xf…

TCP通信的实现和项目案例

TCP协议是面向连接的&#xff0c;在通信时客户端与服务器端必须建立连接。在网络通讯中&#xff0c;第一次主动发起通讯的程序被称作客户端&#xff08;Client&#xff09;程序&#xff0c;简称客户端&#xff0c;而在第一次通讯中等待连接的程序被称作服务器端&#xff08;Ser…

npm install 报错 ‘proxy‘ config is set properly. See: ‘npm help config‘

解决 参考链接&#xff1a;npm install 报错 ‘proxy‘ config is set properly. See: ‘npm help config‘-阿里云开发者社区 (aliyun.com)

Linux Ubuntu 20.04 安装DPDK方法指南

系统及DPDK版本 系统&#xff1a;Ubuntu 20.04 DPDK&#xff1a;20.11.10 Pktgen-DPDK&#xff1a;22.04.1 关于DPDK&#xff0c;其实Ubuntu的软件源中就已经包含了最新的Stable版本的DPDK&#xff0c;如果不想自己编译的话&#xff0c;直接 apt install dpdk 也是可以的 安…

python库(17):pkuseg库实现文本分词

1 pkuseg简介 PKUSEG&#xff0c;全称“北京大学语言计算与机器学习研究组开发的分词工具”&#xff0c;它就像一把锋利的瑞士军刀&#xff0c;帮助我们轻松切割文本。 在Python的文本处理领域&#xff0c;有很多分词工具&#xff0c;比如jieba、SnowNLP等。但是&#xff0c;…

iOS多界面传值

iOS多界面传值 文章目录 iOS多界面传值属性传值协议传值Block传值通知传值KVO传值概述使用步骤 总结 属性传值 这个传值方式和他的名字一样&#xff0c;我们主要还是通过属性对值进行一个传递&#xff0c;主要应用场景是前一个页面向后一个页面传值。 首先我们先要设置一个属…

哪里有ai写真软件免费方法?轻松获取写真的5个技巧

想在8月为自己的社交媒体更新个人形象吗&#xff1f;想要为即将到来的秋季增添一抹新意吗&#xff1f; AI写真软件是我们最佳的理想选择&#xff0c;通过简单的操作&#xff0c;我们可以在短时间内获得一张专属于自己的AI头像&#xff0c;让这个夏天的回忆更加生动。 特别是常…

C++进阶:设计模式___适配器模式

前言 在C的基础语法的学习后,更进一步为应用场景多写代码.其中设计模式是有较大应用空间. 引入 原本在写容器中适配器类有关的帖子,发现适配模式需要先了解,于是试着先写篇和适配器模式相关的帖子 理解什么是适配器类,需要知道什么是适配器模式.适配器模式是设计模式的一种.笔…

【论文阅读】PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

Q: 论文如何解决这个问题&#xff1f; A: 论文通过提出PETRv2框架来解决多相机图像的3D感知问题&#xff0c;具体方法包括以下几个关键点&#xff1a; 时间建模&#xff08;Temporal Modeling&#xff09;&#xff1a; 通过3D坐标对齐&#xff08;3D Coordinates Alignment&…

AI应用开发前景与目标

前景与目标 什么是AIGC AIGC最基本的能力是生成内容&#xff0c;包括文本、图像、视频、代码、3D内容或者几种媒介类型转换组合 形成的“多模态内容”。生成算法、预训练模型、多模态等技术累积融合&#xff0c;以及深度模型方面的 技术创新&#xff0c;共同催生了AIGC的大爆…

一篇文章教你如何在Android上使用QPython高效编程

导语&#xff1a;你是否想在Android设备上体验Python编程的乐趣&#xff1f;QPython是一款强大的Python脚本引擎&#xff0c;让你在手机上也能轻松编写和运行Python代码。本文将带你了解QPython的使用方法&#xff0c;让你随时随地开启编程之旅&#xff01; 一、认识QPython Q…

File 34

package File;import java.awt.*; import java.io.File;public class file1 {public static void main(String[] args) {//创建FILE对象&#xff0c;指代某个具体的文件//路径分隔符File f1new File("C:/Users/SUI/Desktop/kaishi/nih.txt");// File f1new File(&quo…

推荐4款比转转大师还好用的专业数据恢复软件。

数据已经成为我们生活和工作中不可或缺的一部分&#xff1b;然而我们在很多的场景当中都会导致数据丢失&#xff1b;于是数据恢复工具便成了一些人的常用工具。很多人都知道转转大师数据恢复软件&#xff0c;但是也有其他的恢复软件也很好用。 1、福昕恢复 直通车&#xff1a;…

ArkTS通用属性

目录 一、尺寸设置 宽高&#xff0c;外边距&#xff0c;内边距&#xff0c;尺寸size layoutWeight constraintSize 二、位置设置 align direction position offset 使用Edge方式position,offset 三、布局约束 aspectRatio displayPriority 四、Flex布局 flexBas…

数字转罗马字符

import java.util.Scanner;/*** author gyf* ClassName Test* Date 2024/7/31 17:14* Version V1.0* Description : 方法一*/ public class Test {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println("请输入一个字符串…

php类与对象

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理php类与对象相关的知识点 适合有编程基础的人观看 因为我这个也是整理第n语言&#xff0c;这些老套的概念就不再多啰嗦了。 直接整理相应的语法 感觉把php当第一语言学的人不太多了 快速理解类与对…

MyBatis的example.createCriteria()方法学习记录

目录 一、mapper的crud方法:1. insert方法insert(User user)insertSelective(User user) 2. select方法selectByPrimaryKey(id)selectByExample(example)selectCountByExample(example) 3. update方法updateByPrimaryKey(User user)updateByPrimaryKeySelective(User user)upda…

从零开始的MicroPython(六)ADC

上一篇&#xff1a;PWM 文章目录 ADC是什么ESP32的ADC代码 ADC是什么 ADC的英文全称是Analog / Digital Converter&#xff0c;是将模拟信号转换为数字信号的转换器&#xff0c;ADC是单片机读取传感器信号的常见方式。 我们日常生活中的信号&#xff0c;例如光照强度&#xf…