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…

ES各种分页方式及其优缺点对比

ES各种分页方式及其优缺点对比 Elasticsearch (ES) 提供了几种不同的分页方法来帮助用户有效地从大量数据中检索部分结果。以下是几种常见的分页方式及其优缺点对比&#xff1a; 1. From/Size 分页&#xff08;浅分页&#xff09; 说明: 这是最直接也是ES默认的分页方式&…

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

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

“Stable Diffusion“ 是一个常见的数值分析算法,通常用于解决偏微分方程

“Stable Diffusion” 是一个常见的数值分析算法&#xff0c;通常用于解决偏微分方程&#xff08;PDE&#xff09;中的扩散问题。它的稳定性使得它在模拟自然界中的各种扩散过程时非常有用。下面是一个简单的 “Stable Diffusion” 算法的概述&#xff1a; 算法概述&#xff1…

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

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

oracle sql 查近90天数据

要查询Oracle数据库中近90天的数据&#xff0c;您首先需要确定您想查询的表中有一个表示日期的字段。假设您有一个名为your_table的表&#xff0c;并且该表中有一个名为date_column的日期字段&#xff0c;那么您可以使用以下的SQL查询来获取近90天的数据&#xff1a; sql复制代…

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

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

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

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

Python newline用法:深入探索换行符的奥秘

Python newline用法&#xff1a;深入探索换行符的奥秘 在Python编程中&#xff0c;newline字符扮演着至关重要的角色&#xff0c;它不仅是文本流中的分隔符&#xff0c;还是格式化输出的关键元素。然而&#xff0c;对于许多初学者来说&#xff0c;newline的用法却充满了困惑和…

C#按钮事件触发

Xmal文件下 <StackPanel><Button Content"加法" Click"Button_Click_1" Width"200" Height"50" Background"Green" MouseEnter"Button_MouseEnter" MouseLeave"Button_MouseLeave"/><…

《额尔古纳河右岸》有感

看完了迟子建老师的《额尔古纳河右岸》&#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;仿佛就进入了一个充满活力和欢乐的海洋。五彩斑斓的…

rust的类型转换(四)

基础类型 使用 as 关键字&#xff1a;用于基本数值类型之间的转换&#xff0c;例如将 i32 转换为 u32。 例子&#xff1a;let x: i32 10; let y: u64 x as u64; 使用标准库中的转换方法&#xff1a;如 from() 和 into() 方法&#xff0c;这些方法通常用于无风险的转换&#…

ASPICE培训是深化软件过程改进的关键

在当今信息化、智能化的时代&#xff0c;软件行业的发展日新月异&#xff0c;对软件质量和过程管理的要求也越来越高。ASPICE&#xff08;Automotive SPICE&#xff09;作为一种专门针对汽车行业软件过程改进的评估模型&#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…