【数据结构-前缀异或和】力扣1371. 每个元音包含偶数次的最长子字符串

news2024/9/24 9:23:33

给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。

示例 1:
输入:s = “eleetminicoworoep”
输出:13
解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。

示例 2:
输入:s = “leetcodeisgreat”
输出:5
解释:最长子字符串是 “leetc” ,其中包含 2 个 e 。

示例 3:
输入:s = “bcbcbc”
输出:6
解释:这个示例中,字符串 “bcbcbc” 本身就是最长的,因为所有的元音 a,e,i,o,u 都出现了 0 次。
在这里插入图片描述

class Solution {
public:
    int findTheLongestSubstring(string s) {
        int ans = 0, status = 0, n = s.length();
        //1<<5即32
        vector<int> pos(1 << 5, -1);
        for (int i = 0; i < n; ++i) {
            if (s[i] == 'a') {
                status ^= 1<<0;
            } else if (s[i] == 'e') {
                status ^= 1<<1;
            } else if (s[i] == 'i') {
                status ^= 1<<2;
            } else if (s[i] == 'o') {
                status ^= 1<<3;
            } else if (s[i] == 'u') {
                status ^= 1<<4;
            }
            if (pos[status] == -1 && status) {
                pos[status] = i ;
            } else {        
                ans = max(ans, i - pos[status]);
            }
        }
        return ans;
    }
};

首先

vector<int> pos(1 << 5, -1);

等价于vector<int> pos(32, -1);

接着遍历字符串s,status用一个二进制数并使用异或来记录元音字符出现次数,为0说明出现次数为偶数,为1说明出现次数为奇数。

更新完status的时候,进行逻辑判断,由于status被初始化为0,需要&& status,让当到i位置时候的字符串的元音字符都是偶数的时候,直接计算开始到i位置的字符串的长度,而不是更新pos[status] = i 的位置。

当pos[status] = -1的时候,说明之前没有出现过这个status,那么这时候pos[status]则是第一次出现status时候的位置,那么后面遇到相同status的时候,会计算子串的位置,而不会更新pos[status] = -1的位置,然后返回最长的ans即可。

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

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

相关文章

PyCharm 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 选择外观字体 前言 PyCharm 自定义字体大小&#xff0c;统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置为字体样式 JetB…

JVM上篇:内存与垃圾回收篇-13-垃圾回收器

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 13. 垃圾回收器13.1. GC 分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估 GC 的性能指标吞吐量暂停时间…

X86架构(五)——栈操作与寻址操作

我们先采用 X86架构(四) 所学知识&#xff0c;在显示器上显示 123...100 ;代码清单7-1;文件名&#xff1a;c07_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-4-13 18:02jmp near __startmessage db 123...100 __start:mov ax, 0x7c0 ;数据段基…

APP封装安装配置参考说明

APP封装安装配置参考说明 一, 环境准备 宝塔环境 nginx php5.6 mysql5.6 java-openjdk1.8 apktool 1,安装 nginx,php,mysql自行安装 java-openjdk1.8 安装 推荐使用命令行安装 1.1 yum install java-1.8.0-openjdk1.2 yum install -y java-1.8.0-openjdk-devel1.3 设置…

Intellij Idea + Git 完美实战!

环境准备 使用前需要安装一个远程的 Git 仓库和本地的 Git 客户端。由于IDEA中的Git插件需要依赖本地Git客户端&#xff0c;所以需要进行如下配置&#xff1a; 如果本地已有项目&#xff0c;直接通过如下操作&#xff0c;即可在远程自动创建仓库并关联 1. 克隆远程仓库代码&am…

halcon4

图像采集助手-Image Aequisition 1.配置相机IP 和巨型帧等 2.通过海康MVS软件 找到 对应halcon 版本 3. 找到对应halcon版本的 海康相机文件 4.找到Halocn文件目录 粘贴上图文件 通过halcon 助手 -Image Aequisition -自动检测 -找到MVision接口 连接相机 采集图像 实时…

一句话概括TMMi的每个PA

TMMi&#xff08;Test Maturity Model Integration&#xff0c;测试成熟度模型集成&#xff09;是一个由TMMi基金会开发的非商业化的测试成熟度模型&#xff0c;是对CMMI模型的一个补充。它可以帮助组织使测试过程从未管理的状态进化为已管理、已定义、已测量和优化的状态。 T…

网站建设完成后,视频类网站如何做seo

视频类网站的SEO优化是一个综合性的工作&#xff0c;涉及从内容优化、技术优化到外部链接建设等多个方面。由于视频类网站主要提供的是视频内容&#xff0c;其SEO优化不仅需要关注常规的网页优化技巧&#xff0c;还需要考虑视频特有的元素和用户行为模式。以下是针对视频类网站…

Xilinx高速接口之GTP

简介 开坑计划中&#xff0c;主要参考ug482 主要讲解结构以及原语 以及时钟路由和一些其他的 GTP_COMMON还好&#xff0c;需要设置的不多&#xff0c;原语也短&#xff0c; GTP_CHANNEL需要设置的东西真多&#xff0c;原语也长 还好有官方参考例程以及自动生成的原语例化 不然…

0基础学习Python路径(31)logging模块

Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。 程序开发过程中&#xff0c;很多程序都有记录日志的需求&#xff0c;并且日志包含的信息有正常的程序访问日志还可能有错误、警告等信息输出&#xff0c;Python 的 logging 模块提供了标准的日志接…

OpenCV绘图函数(4)绘制轮廓线的函数drawContours()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数会在图像中绘制轮廓线&#xff0c;如果 thickness ≥ 0&#xff0c;则绘制轮廓线&#xff1b;如果 thickness < 0&#xff0c;则填充由轮…

【JLINK】RTT Viewer 的使用

​​​​​​ 一、使用说明 1.1 查找 RTT 缓冲区的开始位置 echo off if exist .\Debug\%PRJ_NAME%.map (findstr /C:" _SEGGER_RTT" .\Debug\%PRJ_NAME%.map rem findstr /C:" __StackTop " .\Debug\%PRJ_NAME%.map rem findstr /C:" Reset_Handle…

从欧拉公式的美到旋转位置编码RoPE

也许你在某些场合听说过欧拉公式&#xff0c;也许你干脆对数学不感冒。机缘巧合下&#xff0c;你点开了这篇文章&#xff0c;大致浏览了下然后关闭&#xff0c;继续为自己的工作学习忙碌。这不妨碍你暂停忙碌的脚步&#xff0c;欣赏她的美。 若干年后&#xff0c;你应该不曾记得…

Java基础(2)- Java环境

目录 一、jvm和跨平台 二、JDK 和 JRE 三、JDK的下载和安装 四、配置环境变量 一、jvm和跨平台 1.jvm&#xff08;Java虚拟机&#xff09;类似于翻译官&#xff1a;java运行程序的假想计算机&#xff0c;主要运行java程序。 2.跨平台&#xff1a;指不同操作系统。 3.关系…

网上买大流量卡要问哪些问题?几个常见的问与答!

大家都比较关注的几个常见的流量卡问题&#xff0c;答案来喽&#xff01; 这几个问题特别适合刚刚接触流量卡的朋友&#xff0c;如果你在购买流量卡时不知道该了解什么&#xff0c;该向商家问什么的时候&#xff0c;不妨问问这几个问题吧&#xff0c;接下来&#xff0c;这篇文…

python 实现square root平方根算法

square root平方根算法介绍 计算平方根&#xff08;Square Root&#xff09;的算法有多种&#xff0c;这里介绍几种常见的方法&#xff1a; 牛顿迭代法&#xff08;Newton’s Method&#xff09; 牛顿迭代法是一种在实数域和复数域上近似求解方程的方法。对于平方根问题&…

home kit认证

在当今快节奏的生活中&#xff0c;智能家居技术正不断改变我们的居住体验。home kit 将这一领域提升到了全新的高度。它不仅让智能家居设备的管理变得更为简单直观&#xff0c;还通过高水平的安全性和互操作性&#xff0c;为用户提供了无缝的体验。 一、什么是home kit home k…

CentOS7将yum源更换为国内源保姆级教程

在 CentOS 7 系统中更改 YUM 源到国内源可以显著提高软件包的下载速度&#xff0c;因为国内源服务器通常距离中国大陆用户更近。以下是一个详细的步骤来完成这一操作&#xff1a; 步骤 1: 备份原有配置 首先&#xff0c;备份原系统中的 yum 配置文件以防万一&#xff1a; BA…

红黑树模拟实现STL中的map与set——C++

1.红黑树的迭代器 &#xff08;本篇代码基于我写的红黑树的实现这篇博客&#xff09; 迭代器的好处是可以方便遍历&#xff0c;是数据结构的底层实现与用户透明。如果想要给红黑树增加迭代器&#xff0c;需要考虑以下问题&#xff1a; begin()与end()&#xff1a; STL明确规定&…

无人机侦测:光电识别追踪设备(双光)技术详解

无人机侦测中的光电识别追踪设备&#xff08;双光&#xff09;技术&#xff0c;是一种高效且精准的目标识别与追踪手段&#xff0c;特别适用于无人机平台。以下是对该技术的详细解析&#xff1a; 一、技术概述 光电识别追踪设备&#xff08;双光&#xff09;结合了可见光和红…