leetcode—字母异位词

1 字母异位词分组

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

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

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出
output: [["bat"],["nat","tan"],["ate","eat","tea"]]


方法一:

排序

由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 定义哈希表 key-value  -> 排序之后的字符串 - 对应的字符串列表Map<String,List<String>> map = new HashMap<>();// 遍历字符串for(String str : strs){// 将当前字符串 转换为字符数组char[] array = str.toCharArray();// 排序 排序之后的字符串为keyArrays.sort(array);String key = new String(array);// 得到key对应的value值 若不存在key 则返回默认值(新建列表存放字符串)List<String> list = map.getOrDefault(key,new ArrayList<String>());list.add(str);// 将新建的列表存入哈希表中map.put(key, list);}// 最终返回哈希表中的value值return new ArrayList<List<String>>(map.values());}
}

2 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

方法:

思想

滑动窗口

  • 在字符串s中构造一个长度与p字符串长度相同的滑动窗口,并在滑动窗口中维护窗口中每个字母的数量
  • 当窗口中每种字母的数量与字符串p中每种字母的数量相同时,则说明当前窗口为字符串p的字母异位词

步骤:

  1. 先计算两个字符串的长度; —>若s < p s中不存在p的字母异位词 则返回空的列表
  2. 遍历p字符串,依次得到每个字母在s  p字符串中出现的位置  sCount[]   pCount[]
  3. 若sCount[] ==  pCount[],则将索引0添加到result列表中
  4. 滑动窗口 边界为 【i, i + pLen】
  5. 最终返回result

 

 public static List<Integer> findAnagrams2(String s, String p) {// 求两个字符串的长度int sLen = s.length();int pLen = p.length();if(sLen < pLen){return new ArrayList<Integer>();}// 创建列表用于返回最终的结果List<Integer> result = new ArrayList<>();// 建立两个数组存放字符串中字母出现的次数int[] sCount = new int[26];int[] pCount = new int[26];// 遍历p中的每个字符 统计每个字符出现的次数for(int i = 0; i < pLen; i++){sCount[s.charAt(i) - 'a'] ++;pCount[p.charAt(i) - 'a'] ++;}//初始化  若sCount == pCount ,则说明s 和p是一个相同的子串 返回0索引if(Arrays.equals(sCount, pCount)){result.add(0);}// 开始滑动窗口 i是滑动前的首位  滑动窗口边界【i, i+pLen】for(int i = 0; i < sLen - pLen; i++){sCount[s.charAt(i) - 'a']--;    // 移动左边界 并将该字母出现的次数减一sCount[s.charAt(i + pLen) - 'a']++;     // 移动右边界 并将该字母出现的次数加一// 判断当前滑动窗口是否为字母异位词,如果是 将起始位置添加到列表中if(Arrays.equals(sCount, pCount)){result.add(i + 1);}}return result;}

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

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

相关文章

Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等

以下是一些在 Linux 系统中常见的命令&#xff0c;它们用于执行各种任务&#xff0c;包括文件和目录管理、系统信息查看、用户管理等。这里列举了一些基础的命令&#xff1a; 文件和目录管理&#xff1a; ls: 列出目录内容。 ls cd: 切换当前目录。 cd /path/to/directory …

妹子回你消息冷淡了怎么办

她回信息慢&#xff0c;对你冷淡&#xff0c;怎么办? 你在微信上主动找她聊天&#xff0c;她回答你回得慢&#xff0c;慢慢的&#xff0c;你会觉得好像和她没戏了。然而&#xff0c;某一天她又突然主动找你聊天&#xff0c;对你又热情了一点&#xff0c;你觉得突然好像又有戏…

如何实现路由鉴权功能

什么是路由鉴权呢&#xff0c;分两个层面 1.如果我们还未登录的话&#xff0c;如果我们跳转其他路由&#xff0c;我们需要自动跳转到登陆页面&#xff0c;并且把跳转的目标路由通过query参数保留下来&#xff0c;点击登录之后&#xff0c;直接跳转过去即可 2.如果我们已经登录…

微信小程序之组件和API

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

SpringBoot教程(十二) | SpringBoot集成JPA

SpringBoot教程(十二) | SpringBoot集成JPA 1. JPA简介 概念&#xff1a; JPA顾名思义就是Java Persistence API的意思&#xff0c;是JDK 5.0注解或XML描述对象&#xff0d;关系表的映射关系&#xff0c;并将运行期的实体对象持久化到数据库中。 优势&#xff1a; 标准化 …

京东云无线宝一代64G加速版刷机记录

文章目录 确认型号刷机环境刷机步骤遇到的坑 确认型号 请确认你的型号是&#xff1a;RE-SP-01B。 拆机后flash芯片型号是&#xff1a;winband 25Q256JVFQ 刷机环境 win11不可以&#xff0c;CH341A的驱动识别不到&#xff0c;win10可以。 刷机步骤 避免重复造轮子。 参考知…

Linux驱动学习—IIC总线之FT5X06触摸驱动实验

1、实现触摸坐标值上报 流程图&#xff1a; 设备树如下&#xff1a; 触摸设备对应的设备树节点是&#xff1a; 读取坐标的寄存器&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/i2c.h> #include <linux/gpio.h> #i…

spring boot学习第七篇:通过spring boot使用redis

1、pom.xml文件里面增加如下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、yml文件增加如下配置&#xff1a; redis:host: loc…

【不用找素材】ECS 游戏Demo制作教程(3) 1.17

一、生成墓碑 新建脚本如下&#xff1a; using Unity.Entities; using Unity.Mathematics;namespace ECSdemo {public struct GraveyardRandom : IComponentData{public Random Value;}}扩充GraveyardMono如下&#xff1a; using Unity.Entities; using Unity.Mathematics; …

【计算机硬件】3、输入输出技术、总线结构

文章目录 输入输出技术内存与接口地址的编址方法1、 内存与接口地址独立编址方法2、内存与接口地址统一编址方法 计算机和外设间的数据交互方式1、程序控制(查询)方式2、程序中断方式3、DMA方式&#xff08;直接主存存取&#xff09; 总线结构 输入输出技术 内存与接口地址的编…

【思科】IPsec VPN 实验配置(动态地址接入)

【思科】IPsec VPN 实验配置&#xff08;动态地址接入&#xff09; 注意实验需求配置思路配置命令拓扑R1基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA ISP_R2基础配置 R3基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA PCPC1PC2 检查建立成功查看命令清除IKE / IPse…

C/C++ 基本数据类型的范围

一、常见的数据类型及其范围 数据类型Size(64位)范围int4Byteunsigned int4Bytelong4Byteunsigned long4Bytelong long8Byteunsigned long long8Byte 查询Size代码&#xff1a;sizeof(类型) 查询范围代码&#xff1a;numeric_limits<类型>::max和numeric_limits<类…

django大数据_草稿本01

文档 Learning_Spark/5.Spark Streaming/ReadMe.md at master LeslieZhoa/Learning_Spark # 在pyspark下运行 from pyspark.ml.feature import HashingTF,IDF,Tokenizer # 导入相关包# 创建一个dataframe&#xff0c;toDF为定义列名 sentenceData spark.createDataFrame([(0…

数据科学与大数据导论期末复习笔记(大数据)

来自于深圳技术大学&#xff0c;此笔记涵盖了期末老师画的重点知识&#xff0c;分享给大家。 等深分箱和等宽分箱的区别&#xff1a;等宽分箱基于数据的范围来划分箱子&#xff0c;每个箱子的宽度相等。等深分箱基于数据的观测值数量来划分箱子&#xff0c;每个箱子包含相同数量…

智慧校园大数据平台架构

平台架构 基础硬件层 基础硬件层是由一组低廉的PC或服务器组合构建而成。基础硬件层主要承载着数据的存储、运算、容错、调度和通信等任务,对基础应用层下达的指令进行执行和反馈。 数据集成 大数据特征表现在实时、交互、海量等方面,并且以半结构化、非结构化数据为主,价…

支付功能的实现

1.商户调用第三方支付服务的主要步骤流程&#xff1f; 1.1 表单跳转 前端点击提交支付&#xff0c;请求后端支付接口 支付接口通过阿里api生成表单信息返回给前端页面 同步回调&#xff0c;异步回调参数 请求参数&#xff1a;总金额&#xff0c;外部订单号 公共参数&#xff1…

HarmonyOS应用开发者高级认证试题库(鸿蒙)

目录 考试链接&#xff1a; 流程&#xff1a; 选择&#xff1a; 判断 单选 多选 考试链接&#xff1a; 华为开发者学堂华为开发者学堂https://developer.huawei.com/consumer/cn/training/dev-certification/a617e0d3bc144624864a04edb951f6c4 流程&#xff1a; 先进行…

K8s(二)Pod资源——node调度策略、node亲和性、污点与容忍度

目录 node调度策略nodeName和nodeSelector 指定nodeName 指定nodeSelector node亲和性 node节点亲和性 硬亲和性 软亲和性 污点与容忍度 本文主要介绍了在pod中&#xff0c;与node相关的调度策略&#xff0c;亲和性&#xff0c;污点与容忍度等的内容 node调度策略node…

鸿蒙原生应用/元服务开发-延迟任务开发实现(二)

一、接口说明 接口名接口描述startWork(work: WorkInfo): void;申请延迟任务stopWork(work: WorkInfo, needCancel?: boolean): void;取消延迟任务getWorkStatus(workId: number, callback: AsyncCallback>): void;获取延迟任务状态&#xff08;Callback形式&#xff09;g…

2024.1.17 网络编程 作业

思维导图 练习题 广播服务器端 #include <myhead.h>int main(int argc, char const *argv[]) {//创建套接字int sfd socket(AF_INET, SOCK_DGRAM, 0);//填充网络信息结构体struct sockaddr_in cin;cin.sin_family AF_INET;cin.sin_port htons(6789);cin.sin_addr.s_…