Leetcode--1371. 每个元音包含偶数次的最长子字符串(Java)

给你一个字符串 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 次。

 

思路:压缩状态,前缀

用二进制每个位置的0,1来记录每个元音的奇偶性,0表示偶,1表示奇

比如现在初始为空,a[0]=0,

现在出现aeiou,那么a[1],a[2],a[4],a[8],a[16]都有值了,值分别是1,2,3,4,5

现在再出现aeiou,字符串就是aeiouaeiou,那么状态就变成了00000,和一开始一样,所以现在符合条件的字符串长度为

10-0=10
 

提示:

1 <= s.length <= 5 x 10^5
s 只包含小写英文字母。

代码:

class Solution {

    public int findTheLongestSubstring(String s) {

        if(s.length()==0) return 0;

        int a[] = new int[1<<5];//每个位置0表示偶数,1表示奇数

        int status=0;//记录每次各个点状态

        Arrays.fill(a,-1);

        a[0]=0;

        int max =0;

        //遍历s,每次改变相应字母位置的奇偶性

        for(int i=0;i<s.length();i++){

            if(s.charAt(i)=='a'){

                status^=1<<0;

            }else if(s.charAt(i)=='e'){

                status^=1<<1;

            }else if(s.charAt(i)=='i'){

                status^=1<<2;

            }else if(s.charAt(i)=='o'){

                status^=1<<3;

            }else if(s.charAt(i)=='u'){

                status^=1<<4;

            }

            //第一次出现这个状态的位置和现在的位置之间就是符合条件的子字符串

            //都是先出现各种包含奇数的状态

            if(a[status]>=0){

                max = Math.max(max,i+1-a[status]);

                //第一次出现这个状态,记录下当前位置

            }else{

                a[status]=i+1;

            }

        }

        return max;

    }

}

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

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

相关文章

下一代人工智能

来源&#xff1a;人机与认知实验室翻译&#xff1a;朱浩然摘要&#xff1a;人工智能和机器学习的最新研究在很大程度上强调了通用学习和越来越大的训练集以及越来越多的计算。相反&#xff0c;我提出了一种以认知模型为中心的混合&#xff0c;知识驱动&#xff0c;基于推理的方…

Leetcode--5. 最长回文子串(java)

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

图论-第k短路

A* 做法 \(f(p)g(p)h(p)\) &#xff0c; \(f(p)\) 作为优先队列比较函数用来比较的值&#xff0c; \(g(p)\) 是当前路径到 \(p\) 的距离&#xff0c; \(h(p)\) 是 \(p\) 点到终点最短路&#xff08;预处理可以得到&#xff09;。 每个点出队次数 \(k\)&#xff0c;就说明当前找…

Arm十年最大更新:V9架构正式发布

来源&#xff1a;由半导体行业观察&#xff08;ID:icbank&#xff09;编译&#xff1a;「anandtech」自Arm在2011年10月首次发布Armv8架构以来&#xff0c;已经过去了近十年的时间。这对Arm来说是一个相当可观的十年&#xff0c;因为在这段时间内&#xff0c;他们的指令集架构受…

输出错误信息

在error页面加以下代码&#xff0c;之后检查网页源代码就会出现错误信息 (URL,Exception是后台传过来的参数) <div><div th:utext"<!--" th:remove"tag"></div><div th:utext"Failed Request URL : ${url}" th:remove…

Lodop打印设计界面生成代码带”...(省略)”

Lodop的设计界面中&#xff0c;菜单里的生成代码&#xff0c;如果打印项内容过多&#xff0c;后面会显示”...(省略)”&#xff0c;省略的是打印项的内容值&#xff0c;无论是纯文本还是超文本&#xff0c;都可以用选中打印项-右键-设置属性里找到该打印项的全部值&#xff0c;…

南洋理工大学研发植物“通信”设备,未来可成为环境探测器

来源&#xff1a;MEMS 最新研究成果由新加坡南洋理工大学&#xff08;NTU&#xff09;领导的一个科学家团队开发了一种可以向植物发送电信号和从植物接收电信号的设备&#xff0c;为利用植物的新技术打开了大门。团队的发现于今年1月25日刊登于国际知名科学期刊《自然》属下的…

服务器核心知识

电脑&#xff1a;辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑&#xff01;不管是桌上型电脑(桌机)、笔记型电脑(笔电)、平板电脑、智慧型手机等等&#xff0c;这些东西都算是电脑。虽然接触的这么多&#xff0c;但是&#xff0c;你了解电脑里面的元件有什么吗&#xff1f…

Spring AOP解析

AOP: Aspect Oriented Programming 面向切面编程。 AOP底层实现原理&#xff1a;代理模式 什么是代理模式&#xff1f; 通过代理控制对象的访问,可以详细访问某个对象的方法&#xff0c;在这个方法调用处理&#xff0c;或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程…

杜克大学和Facebook联手开发更好的光通信

来源&#xff1a;IEEE电气电子工程师Illustration: Duke UniversityA close-up depiction of the new fiber-free optical WiFi antenna. Silver nanocubes are spaced just a few nanometers above a silver base, with fluorescent dyes sandwiched in between. The physical…

Leetcode--287. 寻找重复数(Java)

给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4…

优动漫PAINT核心功能介绍

优动漫PAINT是一款功能强大的动漫绘图软件&#xff0c;适用于个人和专业团队创作&#xff0c;分为个人版和EX版。搭载了绘制漫画和插画所需的所有功能——丰富的笔工具、超强的笔压感应和手颤修正功能&#xff0c;可分别满足画师对于插画、漫画和动画创作的针对性需求。 1. 实现…

2020图灵奖颁给“龙书”两位作者!合作数十年,他们让计算机读懂码农代码

来源&#xff1a;大数据文摘作者&#xff1a;Caleb就在昨天&#xff0c;2020年图灵奖公布了获奖名单。哥伦比亚大学计算机科学名誉教授Alfred Vaino Aho和斯坦福大学计算机科学名誉教授Jeffrey David Ullman共享了这一殊荣。根据国际计算机协会&#xff08;ACM&#xff09;报道…

C语言例题4

1.以下程序运行后&#xff0c;输出结果是 9.5 #include<stdio.h> #define PT 5.5 #define S(x) PT*x*x     int main( )     { int a1&#xff0c;b2;     printf(“%4.1f\n”&#xff0c;S(ab))     } PT*ab*ab5.5*12*129.5 2. 下列对字符串的定义中…

volatile关键字解析

volatile&#xff1a; 1.保证可见性 2.禁止重排序 我们先来看看一个问题&#xff0c;关于ii1的问题。 首先&#xff0c;他不是一个原子性的操作&#xff0c;我们通常将不可拆分的操作称为原子操作 而ii1需要先在主存中取得i的值&#xff0c;之后复制到高速缓存之中&#x…

HTML5/CSS3基础

1. HTML 1.1 什么是HTML HTML是用来制作网页的标记语言HTML是Hypertext Markup Language的英文缩写,即超文本标记语言HTML语言是一种标记语言,不需要编译,直接由浏览器执行HTML文件是一个文本文件,包含了一些HTML元素,标签等HTML文件必须使用.html或.htm为文件名后缀HTML是大小…

机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的

来源&#xff1a;IEEE Spectrum作者&#xff1a;Kathy Pretz编译&#xff1a;机器之心编辑&#xff1a;小舟、张倩「人工智能系统还远远不够先进&#xff0c;无法在涉及推理、运用现实世界知识和社交互动等许多任务中替代人类。」机器学习先驱迈克尔 欧文 乔丹&#xff08;Mi…

synchronized和lock的区别

公平锁。syn是非公平锁&#xff0c;无法保证线程按照申请锁的顺序获得锁&#xff0c;而Lock锁提供了可选参数&#xff0c;可以配置成公平锁&#xff0c;也可以配置成非公平锁。通常来说&#xff0c;非公平锁的效率比公平锁要高。 可中断锁。一个线程使用syn获取锁&#xff0c;除…

经典数值优化算法--专题学习

通用的损失函数最优化的数值方法&#xff0c;来源于泰勒展开式&#xff0c;多元函数的泰勒展开式为&#xff1a; 一、一阶逼近与一阶方法 一阶泰勒展开式&#xff1a; 其中&#xff0c;是代表了β变化的可能性&#xff0c;t在之后说到的梯度下降方法中演变成了学习速率。 现在&…

美国雷神公司对第六代战斗机的任务系统提出六点预测

来源&#xff1a;转载自公众号 “空天防务观察”图片&#xff1a;来源于网络编辑&#xff1a;朱锦锟审阅&#xff1a;原熙文2021年3月29日&#xff0c;美国雷神技术公司旗下的雷神情报与太空公司刊文&#xff0c;称该公司的工程师们针对可在未来“第六代”战斗机上运行的任务系…