1542. 找出最长的超赞子字符串
题目链接:1542. 找出最长的超赞子字符串
代码如下:
//参考链接:https://leetcode.cn/problems/find-longest-awesome-substring/solutions/2773468/qian-zhui-yi-huo-he-fu-lei-si-ti-mu-pyth-j8lx
class Solution
{
public:
int longestAwesome(string s)
{
vector<int> pos(1<<D,s.size());//s.size() 表示没有找到异或前缀和
pos[0]=-1;
int res=0,pre=0;
for(int i=0;i<s.size();i++)
{
pre^=1<<(s[i]-'0');
for(int d=0;d<D;d++)
{
res=max(res,i-pos[pre^(1<<d)]);//奇数
}
res=max(res,i-pos[pre]);//偶数
if(pos[pre]==s.size())//首次遇到值为pre的前缀异或和,记其下标 i
{
pos[pre]=i;
}
}
return res;
}
private:
const int D=10;//s中的字符种类数
};