1371. 每个元音包含偶数次的最长子字符串

1371. 每个元音包含偶数次的最长子字符串

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • _1371每个元音包含偶数次的最长子字符串
  • 错误经验吸取

原题链接:

1371. 每个元音包含偶数次的最长子字符串

https://leetcode.cn/problems/find-the-longest-substring-containing-vowels-in-even-counts/description/

完成情况:

在这里插入图片描述

解题思路:

这段代码是用来解决一个特定的问题:找出给定字符串中最长的一个子串,使得该子串中的所有元音字母(‘a’, ‘e’, ‘i’, ‘o’, ‘u’)都出现了偶数次。

代码的主要思想基于状态压缩和前缀和的概念,具体解释如下:

  1. 状态压缩:使用一个二进制数来表示5个元音字母出现次数的奇偶性。例如,状态01010表示’a’和’o’出现了奇数次,而’e’, ‘i’, 和’u’出现了偶数次。因为只有5个元音字符,状态总数为2的5次方(1 << 5)即32种状态。

  2. 数组position初始化:创建一个长度为32的数组position,用来记录每种状态第一次出现的位置索引。初始值设为-1,因为一开始任何状态都未曾出现。

  3. 遍历字符串:遍历整个字符串,使用局部变量status来跟踪当前的状态。对每个字符,检查它是否是元音字母,并更新状态。

    • 更新状态使用异或运算^(XOR),这个操作可以翻转特定位的值。例如,如果’a’字符出现一次,则status的第0位翻转一次(status ^= (1 << 0)),出现两次则再翻转回来,保证如果出现偶数次则该位为0。
  4. 计算最长子串:在遍历过程中,每次更新status后,检查这个状态是否已经出现过。

    • 如果出现过(position[status] >= 0),说明从之前的位置到当前位置,所有元音字母出现了偶数次,因此使用Math.max来尝试更新结果result
    • 如果这个状态是第一次出现,记录它的位置(position[status] = i + 1)。这里i + 1是因为数组的初始位置(position[0])被预设为0来表示开始前的状态。

遍历完成后,变量result包含了满足条件的最长子串的长度。

参考代码:

_1371每个元音包含偶数次的最长子字符串

package leetcode板块;import java.util.Arrays;public class _1371每个元音包含偶数次的最长子字符串 {/**** @param s* @return*/public int findTheLongestSubstring(String s) {/*这样我们就可以将 555 个元音字母出现次数的奇偶性压缩到了一个二进制数中,且连续对应了二进制数的 [(00000)2,(11111)2][(00000)_2,(11111)_2][(00000) 2 ,(11111) 2 ] 的范围,转成十进制数即 [0,31][0,31][0,31]。因此我们也不再需要使用哈希表,直接用一个长度为 323232 的数组来存储对应状态出现的最早位置即可。*/int n = s.length();int position [] = new int[1 << 5];Arrays.fill(position,-1);int result = 0,status = 0;//position[0] = 0;for (int i = 0;i<n;i++){char ch = s.charAt(i);if (ch == 'a'){status ^= ( 1 << 0);} else if (ch == 'e') {status ^= (1 << 1);}else if (ch == 'i') {status ^= (1 << 2);}else if (ch == 'o') {status ^= (1 << 3);}else if (ch == 'u') {status ^= (1 << 4);}if (position[status] >= 0){ //全部都为偶数result = Math.max(result,i + 1 - position[status]);}else {position[status] = i + 1;}}return result;}
}

错误经验吸取

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

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

相关文章

Oracle和mysql中插入时间字段

例如有id 和 times两个字段 Oracle insert into xxx values|(1,sysdate) mysql insert into xxx values(1,now()) 在 MySQL 中&#xff0c;SYSDATE() 函数也是可用的&#xff0c;它与 NOW() 类似&#xff0c;但略有不同&#xff1a; NOW…

父组件查询时调用子组件的方法

使用场景&#xff1a; 头部的查询条件放在父组件上&#xff0c;当点击查询时&#xff0c;下面的六个子组件会更新数据 例如&#xff1a; 1.在父组件上定义一个ref&#xff1a; 例如&#xff1a; 提示&#xff1a;在JS上定义ref&#xff0c;点击查询条件时调用这个ref里面的方…

手把手制作Vue3+Flask全栈项目 全栈开发之路实战篇 问卷网站(二)管理员后台

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

MacOS - 为什么 Mac 安装软件后安装包在桌面上无法删除?

只要你将这磁盘里面的软件放到应用程序里面去了&#xff0c;那么用鼠标选中这个跟磁盘一样的东西&#xff0c;然后按下键盘上的 Command E 即可移除桌面上的这个磁盘。

404错误页面源码,简单实用的html错误页面模板

源码描述 小编精心准备一款404错误页面源码&#xff0c;简单实用的html错误页面模板&#xff0c;简单大气的页面布局&#xff0c;可以使用到不同的网站中&#xff0c;相信大家一定会喜欢的 效果预览 源码下载 https://www.qqmu.com/3375.html

《额尔古纳河右岸》有感

看完了迟子建老师的《额尔古纳河右岸》&#xff0c;老规矩&#xff0c;写点东西吧。最近一段时间确实挺迷茫的&#xff0c;所以给自己找了点事儿&#xff0c;看看书。期初并不能认真看进去&#xff0c;慢慢的看见去之后&#xff0c;就愈发想知道故事的后来。 书里有太多关于死亡…

GPT注册、手机验证码、侧边栏、翻译、绘图和视频的安装与使用

侧边栏 下面这个侧边栏收费 效果不错 ## chrome自动翻译 沉浸式翻译效果最好&#xff0c;支持视频 沉浸式翻译 微软网页 https://designer.microsoft.com/image-creator https://www.yeschat.ai/zh-CN/assistants 字节AI网页 https://www.coze.com/store GPT注册 https:…

YOLOv10环境搭建推理测试

引子 两个多月前YOLOv9发布&#xff08;感兴趣的童鞋可以移步YOLOv9环境搭建&推理测试_yolov9安装-CSDN博客&#xff09;&#xff0c;这才过去这么短的时间&#xff0c;YOLOv10就横空出世了。现在YOLO系列搞得就和追剧一样了。。。OK&#xff0c;那就让我们开始吧。 一、…

yolo-v8window环境运行

源码https://github.com/ultralytics/ultralytics 1.用pycharm打开YOLOv8文件夹&#xff0c;下载依赖项&#xff0c;依赖项已经以作者的名字来封装好&#xff0c;所以直接在终端输入&#xff1a;pip install ultralytics&#xff0c;安装好之后会默认安装的cpu版本的torch&am…

FENDI CLUB啤酒屋狂欢派对:夏日激情,精酿畅饮

在炎炎夏日&#xff0c;没有什么比一场啤酒屋的狂欢派对更能点燃人们的热情了。FENDI CLUB啤酒屋作为城市中的一颗璀璨明珠&#xff0c;以其独特的魅力吸引着无数啤酒爱好者前来畅享夏日激情。 一进入FENDI CLUB&#xff0c;仿佛就进入了一个充满活力和欢乐的海洋。五彩斑斓的…

结构赋值对象

先看代码 Object.prototype[Symbol.iterator] function () {// 使用 Object.values(this) 方法获取对象的所有值&#xff0c;并返回这些值的迭代器对象return Object.values(this)[Symbol.iterator]()// return Object.keys(this)[Symbol.iterator]() } const c {age: 18,na…

推荐ChatGPT4.0——Code Copilot辅助编程、Diagrams: Show Me绘制UML图、上传PDF并阅读分析

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…

先进工艺的DPT技术

“2.5GHz频率 hierarchy DVFS低功耗A72培训” 2.5GHz 12nm 景芯A72 upf DVFS 后端实战训练营&#xff01;随到随学&#xff01; 课程采用hierarchy/partition flow&#xff0c;先完成单核A72实战&#xff0c;然后完成A72 TOP实战&#xff01;训练营简介&#xff1a; Instance&a…

JSP、Servlet的Session到底什么时候创建?登录与验证到底和Session有什么关系?

1 测试1[2024-5-23-9:00] 两次获取Session&#xff0c;第一次在查询到用户名密码是否与数据库数据匹配之前&#xff0c;即没有显式地getSession之前&#xff1b; 第二次在查询到用户名密码与数据库数据匹配&#xff0c;显式地getSession之后。 未通过登录验证的Session 通过…

【网络安全的神秘世界】VsCode直连虚拟机

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 通过VsCode连接虚拟机&#xff0c;可以进行远程操作 在vscode里安装以下插件&#xff1a; Docker Dev Containers Remote Development Remote ssh 配…

Execl数据导入 EasyExcel实现

官网 1. 需求简介 读取下面表格数据 第一行和第二行是计划信息 第三行是计划详情的抬头信息,以下行是计划详情信息 总段包含多个分段,总段使用了单元格合并功能 2. 实现读取功能 2.1 引入easyexcel依赖 <dependency><groupId>com.alibaba</groupId><…

分享几个好用的网站、软件

1、果核剥壳 https://www.ghxi.com 果核剥壳是一家综合科技站点&#xff0c;看新闻&#xff0c;分享破解软件、绿色软件&#xff0c;Windows系统。守住互联网最后的一片净土。 2、小众软件 https://www.appinn.com 小众软件是一个分享免费、小巧、有趣、实用软件的网站&…

Hugo搭建博客和部署全流程—Congo主题和优化

欢迎来到我的全新博客&#xff1a;探索科研、创业和日常——Hugo搭建博客、部署和优化全流程 &#x1f30f; Demo site: https://sylvanding.online/ ⭐️ Repo: https://github.com/sylvanding/sylvanding.github.io 我的博客使用Hugo搭建&#xff0c;选择Congo主题&#xff0…

为什么25+胶原蛋白会流失?

随着年龄的增长&#xff0c;特别是当我们步入25岁之后&#xff0c;胶原蛋白的流失问题逐渐凸显&#xff0c;成为影响皮肤健康和外观的重要因素。以下将从几个方面详细解释胶原蛋白流失的原因&#xff1a; 一、年龄增长 胶原蛋白是皮肤的主要支撑结构&#xff0c;但随着年龄的增…

数据挖掘与机器学习——分类算法

目录 机器学习算法最普通分类&#xff1a; 分类算法的定义&#xff1a; 分类算法的应用&#xff1a; 分类器实现分类&#xff1a; 分类器的构建标准&#xff1a; 概率模型&#xff1a; 贝叶斯公式&#xff1a; 朴素贝叶斯算法&#xff08;朴素贝叶斯分类器&#xff09;…