【LeetCode-中等题】438. 找到字符串中所有字母异位词

news2024/11/21 1:39:09

题目

在这里插入图片描述

题解一:暴力排序

依次截取三为排序好的字符串拿出来比较

在这里插入图片描述

// 方法一,暴力排序
          List<Integer> res = new ArrayList<Integer>();
          int n = s.length();
          int k = p.length();
          if (n < k) {
              return res;
          }
          char[] chars = p.toCharArray();
          Arrays.sort(chars);
          p = new String(chars); 
          // 只需要遍历一次,排序进行比较
          for (int i = 0; i <= n - k; i++) {
              // 找到长度为k的子字符串
              String temp = s.substring(i, i + k);
              // 进行排序
              chars = temp.toCharArray();
              Arrays.sort(chars);
              temp = new String(chars);
              if (p.equals(temp)) {
                  res.add(i);
              }
          }
          return res;

题解二:滑动窗口+记录字符出现次数

思路就是,设置两个数组,因为题目中说只包含小写字母,那么设置两个数组长度为26的数组,一个用于存放比较的串,一个用于滑动窗口的串

p.charAt(i)-'a'其实就代表i元素在这个数组的位置,那么只需记录固定窗口下的  字母出现的个数,与比较的串相比较
如p="abc",则pindex为[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

如过滑动的窗口元素是p="cba",sindex[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

在这里插入图片描述

//方法二 滑动窗口

 int plen  = p.length();
 int slen =  s.length();
 List<Integer> list = new ArrayList<>();
 int[] pindex = new int[26];
 int[] sindex = new int[26];
 if(slen<plen){
        return list;
    }
//如p="abc",则pindex为[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
//如过滑动的窗口元素是p="cba",sindex[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
// 这两个就是异位次   原理就是记录字母出现的次数,转换成出现的位置的索引值     
//                    abc[1,1,1,....]  索引 0 1 2 位置的值就是字母abc出现的次数值   
//假设需要匹配的字符串为cbc[0,1,2,....]   a 0个,b 1个,c 2个,明细不匹配

//当滑动窗口的首位在s[0]处时 (相当于放置滑动窗口进入数组)
for(int i = 0;i<plen;i++){
    pindex[p.charAt(i)-'a']++;//记录要寻找的字符串中每个字母的词频(只用进行一次来确定)
    sindex[s.charAt(i)-'a']++;//记录s中前pLen个字母的词频
}
//判断放置处是否有异位词     (在放置时只需判断一次)
if(Arrays.equals(pindex,sindex)) list.add(0);

 //开始让窗口进行滑动
 for(int i = 1;i<=slen-plen;i++){
   sindex[s.charAt(i-1)-'a']--;
  sindex[s.charAt(i+plen-1)-'a']++;

   //判断滑动后处,是否有异位词
        if(Arrays.equals(pindex,sindex)){
            list.add(i);
        } 
 }
 return list;

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

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

相关文章

软件配置安装(破解)--- maven下载配置

检查环境是否已有 首先检查一下电脑里有无maven环境&#xff0c;有的话就不用安装了 查看path环境中没有maven&#xff0c;开始准备接下来的重头戏 下载maven 下载bin.zip版 解压mavenxxxbin.zip &#xff08;建议把解压的文件放在一个文件夹内&#xff0c;命名英文的env…

基于Redis的BitMap实现签到、连续签到统计(含源码)

微信公众号访问地址&#xff1a;基于Redis的BitMap实现签到、连续签到统计(含源码) 推荐文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附…

数字 IC 设计职位经典笔/面试题(三)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; 1. IC 设计中同步复位与异步复位的区别&#xff1f; 同步复位在时钟沿变化时&#xff0c;完成复位动作。异步复位不管时钟&#xff0c;只要复位信号满足条件&#xff0c;就完成复位动作。异步复位对复位信号要求…

coco数据集制作-多文件夹

背景&#xff1a;标准的coco格式数据集需要把所有图片放到一个文件夹里&#xff0c;而很多情况下&#xff0c;会有很多个文件夹&#xff0c;我们并不想把所有图片放到一起。 本文把多个文件夹下的yolov8(5)的txt标签转换至coco标签&#xff0c;转换标签代码如下&#xff1a; …

ipad可以用别的品牌的手写笔吗?开学平价电容笔推荐

开学需要买什么呢&#xff1f;随着科技的不断进步&#xff0c;各种类型的iPad电容笔应运而生。一支好的电容笔&#xff0c;不仅能大大提高我们的工作效率&#xff0c;而且能大大提高我们的生产力。平替的这款电容笔&#xff0c;不管是在技术上&#xff0c;还是在品质上&#xf…

u-view 的u-calendar 组件设置默认日期后,多次点击后,就不滚动到默认日期的位置

场景&#xff1a;uniapp开发微信小程序 vue2 uview版本&#xff1a;2.0.36 &#xff1b; u-calendar 组件设置默认日期后 我打开弹窗&#xff0c;再关闭弹窗&#xff0c; 重复两次 就不显示默认日期了 在源码中找到这个位置进行打印值&#xff0c;根据出bug前后的值进行…

Java smslib包开发

上一篇文章我详细介绍RXTXcomm的安装方法和简单代码,如果小伙伴涉及到需要使用手机短信模块完成短信收发需求的话,可以使用到smslib进行开发。 首先还是同样的,将整个smslib包源码导入项目,并且将它所需依赖一起进行导入 导入完成之后,我们就可以对smslib包进行二次开发了 下面…

大华智慧园区综合管理平台文件上传漏洞复现

该文章来自作者日常学习笔记&#xff0c;也有部分文章是经过作者授权和其他公众号白名单转载&#xff0c;未经授权&#xff0c;严禁转载&#xff0c;如需转载&#xff0c;联系开白。请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关。…

站点平台技术架构

系统架构部署思维导图 一、前期工作 1.系统保持一致性方案&#xff1a; GIT版本控制&#xff1a;通过总控端向租户端发送一个更新同步请求&#xff0c;租户端收到请求后执行GIT PULL 命令&#xff0c;执行完成命令后会进行获取当前版本指定的SQL文件&#xff0c;进行同步更新…

RTK定位

文章目录 前言什么是 RTKRTK的工作原理网络RTK vs 传统RTK结语 前言 说到定位&#xff0c;相信大家一定不会觉得陌生。如今我们所处的信息时代&#xff0c;人人都有手机。每天&#xff0c;我们都会用到与地图和导航有关的APP。 这些APP&#xff0c;就是基于定位技术的。说到定…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下&#xff1a; 硬件平台&#xff1a;x86_64&#xff08;amd64&#xff09;操作系统&#xff1a;CentOS 7.8 2003数据库版本&#xff08;含CSDK&#xff09;&#xff1a;GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10&#xff1f;该版本包含QODBC。 1&#…

达到国际领先水平!“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果通过专家组评价

​本文转自中国地理产业协会 评价会现场 8月16日&#xff0c;受广西自然资源产品质量检验中心委托&#xff0c;广西人工智能学会在南宁市采用线上线下结合的形式&#xff0c;组织召开了“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果评价会。由中国科学院院士、…

行为型(六) - 状态模式

一、概念 状态模式&#xff08;State Pattern&#xff09;&#xff1a;类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 使用场景&#xff1a; 一个对象的行为由它的状态决定&#xff0c;而且它必须在运行时根据自身状态改变它的行为。 二、实现 这里控…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

期权是什么?期权的优缺点是什么?

期权是一种合约&#xff0c;有看涨期权和看跌期权两种类型&#xff0c;也就是做多和做空两个方向&#xff0c;走势标的物对应大盘指数&#xff0c;这也是期权与其他金融工具的主要区别之一&#xff0c;可以用于套利&#xff0c;对冲股票和激进下跌的风险&#xff0c;下文介绍期…

HTML总结 2[转]

以下转载和参考自&#xff1a;HTML 表单。 1、表格 可以通过 CSS 设置表格的样式&#xff1a; 如下为将上面table.lamp th,td样式中的padding注释掉&#xff0c;开启table.lamp中的padding的效果&#xff1a; 2、列表 3、表单 表单用于收集用户的输入&#xff0c;如下图所…

咨询师需要具备同理心

做咨询的这么多年&#xff0c;经常会听到这样的一些槽点&#xff1a; “也不知道怎么想的&#xff0c;压根就不是正常的思考逻辑&#xff01;” “上次就是这样&#xff0c;跌到同一条沟里了吧&#xff1f;” “如此简单的事情&#xff0c;推进起来为什么这么难&#xff1f;…

IDC发布中国低代码市场报告,得帆独立低代码市占率第一

近日&#xff0c;国际数据公司IDC公布了《2022下半年中国低代码与零代码软件市场跟踪报告》&#xff08;以下简称“报告”&#xff09;。 2022下半年中国低代码与零代码软件市场规模为15.6亿元人民币&#xff0c;得帆低代码PaaS平台凭借过硬的产品优势和深厚的客户实践经验&am…

RK3399平台开发系列讲解(内核调试篇)网络调试工具

🚀返回专栏总目录 文章目录 一、dstat 工具介绍二、例如dstat 进行网络问题调试三、ss 命令查看 TCP 详细信息四、netstat 查看TCP详细信息沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍网络的相关工具。 一、dstat 工具介绍 当设备产生问题,而我们又…

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”&#xff0c;七夕节表白日&#xff0c;你要错过吗&#xff1f;如果你言辞不善&#xff0c;羞于开口的话&#xff0c;可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效&#xff0c;全屏的爱心和…