这里是题目描述:LeetCode-1371.每个元音包含偶数次的最长子字符串
本题考查到的知识点:前缀和、状态压缩、位运算(异或)。参考了LeetCode官网的题解
暂时不对题解进行详述
题解代码:
class Solution {
public int findTheLongestSubstring(String s) {
int[] stateIndex=new int[(int)Math.pow(2,5)]; //记录32种状态的第一次出现的下标
for(int i=0;i<stateIndex.length;i++)
{
stateIndex[i]=-1; //初始化
}
int state=0;
int res=0;
for(int i=0;i<s.length();i++)
{
char ch=s.charAt(i);
if(ch=='a')
{
state^=(1<<0);
}
else if(ch=='e')
{
state^=(1<<1);
}
else if(ch=='i')
{
state^=(1<<2);
}
else if(ch=='o')
{
state^=(1<<3);
}
else if(ch=='u')
{
state^=(1<<4);
}
if(state!=0 && stateIndex[state]<0)
{
stateIndex[state]=i;
}
else
{
res=Math.max(res,i-stateIndex[state]);
}
}
return res;
}
}
时间复杂度:O(n)
空间复杂度:O(1)