zoukankan      html  css  js  c++  java
  • 求有多少个连续字串中所有的字母都出现了偶数次

    给出一个长度为 n 的字符串(1<=n<=100000),求有多少个连续字串中所有的字母都出现了偶数次。 

    http://acm.upc.edu.cn/problem.php?id=1001

    这题的思路是这样的,首先我们可以状压,每一位0代表该位代表字母的数量是偶数个,1则代表奇数个

    那么我们记录一个前缀的状态,如果后面有欧串,则一定可以异或之前出现过的前缀得到全零的合法状态,

    因此我们用map记录一下,之前有多少个相同状态的前缀就好了

    不用枚举子串的原因是,我们总可以用长的前缀减去短的前缀来获得所有符合条件的子串,附上代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    using namespace std;
    const int maxn=1e5+7;
    char s[maxn];
    map<int,int> mp;
    typedef long long ll;
    int main(){
        int T;scanf("%d",&T);
        while(T--){
            scanf("%s",s);mp.clear();
            int len=strlen(s);
            ll ans=0;int cur=0;mp[cur]=1;
            for(int i=0;i<len;++i){
                cur^=(1<<(s[i]-'a'));
                ans+=mp[cur];
                mp[cur]++;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    JSP自定义标签
    Java集合之Arrays 剖析
    关于Java8中的Comparator那些事
    关于Comparable和Comparator那些事
    浅析Thread的join() 方法
    多线程的具体实现
    如何实现 List 集合的线程安全
    集合使用 Iterator 删除元素
    Tomcat目录详解
    一文读懂微服务架构
  • 原文地址:https://www.cnblogs.com/linkzijun/p/6792211.html
Copyright © 2011-2022 走看看