营销型网站单页面,个人网站备案 服务内容怎么写,电子商城网站设计,网站被k了怎么办给你一个字符串 s #xff0c;请你返回满足以下条件的最长子字符串的长度#xff1a;每个元音字母#xff0c;即 a#xff0c;e#xff0c;i#xff0c;o#xff0c;u #xff0c;在子字符串中都恰好出现了偶数次。 示例 1#xff1a;
输入#xff1a;s elee…给你一个字符串 s 请你返回满足以下条件的最长子字符串的长度每个元音字母即 aeiou 在子字符串中都恰好出现了偶数次。 示例 1
输入s eleetminicoworoep 输出13 解释最长子字符串是 leetminicowor 它包含 eio 各 2 个以及 0 个 au 。 示例 2
输入s leetcodeisgreat 输出5 解释最长子字符串是 leetc 其中包含 2 个 e 。 示例 3
输入s bcbcbc 输出6 解释这个示例中字符串 bcbcbc 本身就是最长的因为所有的元音 aeiou 都出现了 0 次。 思路压缩状态前缀
用二进制每个位置的01来记录每个元音的奇偶性0表示偶1表示奇
比如现在初始为空a[0]0,
现在出现aeiou那么a[1],a[2],a[4],a[8],a[16]都有值了值分别是12345
现在再出现aeiou字符串就是aeiouaeiou那么状态就变成了00000和一开始一样所以现在符合条件的字符串长度为
10-010
提示
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[15];//每个位置0表示偶数1表示奇数 int status0;//记录每次各个点状态 Arrays.fill(a,-1); a[0]0; int max 0; //遍历s每次改变相应字母位置的奇偶性 for(int i0;is.length();i){ if(s.charAt(i)a){ status^10; }else if(s.charAt(i)e){ status^11; }else if(s.charAt(i)i){ status^12; }else if(s.charAt(i)o){ status^13; }else if(s.charAt(i)u){ status^14; } //第一次出现这个状态的位置和现在的位置之间就是符合条件的子字符串 //都是先出现各种包含奇数的状态 if(a[status]0){ max Math.max(max,i1-a[status]); //第一次出现这个状态记录下当前位置 }else{ a[status]i1; } } return max; }
}