首页 > 其他分享 >构成回文串的数目

构成回文串的数目

时间:2023-03-20 13:35:21浏览次数:35  
标签:int ll long include 数目 构成 回文

#include<iostream>
#include<map>
#include<string>
using namespace std;

const int N=1e5+10;
typedef long long ll;

int n;
map<int,int> mp;
int sum[N];
ll ans;

int lowbit(int x)
{
    return -x&x;
}
int main()
{
    scanf("%d",&n);
    
    for(int i=0;i<n;i++)
    {
        string str;
        cin>>str;
        int a[30]={0};
        for(int j=0;j<str.size();j++)
        a[str[j]-'a']++;
        for(int j=0;j<26;j++)
        if(a[j]&1) sum[i]+=1<<j;
        mp[sum[i]]++;
    }
    //配对成功后,回文串中最多只能有一个字符的数量是奇数
    for(int i=0;i<n;i++)//该字符串与其他字符串能否成功配对
    {
        int x=sum[i];
        while(x)
        {
            int y=sum[i]-lowbit(x);//减去最后一个1,x和y配对,最多会有一个奇数
            if(mp[y]) ans+=1ll*mp[y];
            x-=lowbit(x);
        }
    }
    
    for(auto p:mp) //自身与自身配对
    ans+=p.second*1ll*(p.second-1)/2;
    
    cout<<ans;
    
    return 0;
}

 

标签:int,ll,long,include,数目,构成,回文
From: https://www.cnblogs.com/tolter/p/17235947.html

相关文章

  • 6352.美丽子集的数目-337
    美丽子集的数目给你一个由正整数组成的数组nums和一个正整数k。如果nums的子集中,任意两个整数的绝对差均不等于k,则认为该子数组是一个美丽子集。返回数组n......
  • Leetcode 5.最长回文子串(区间dp)
    题目链接在这里:5.最长回文子串-力扣(LeetCode)首先肯定是个n^2的算法,枚举起点也是必要的,但是枚举终点很显然不行,但是考虑到回文串会向下兼容,因此我们可以枚举长度,这就是......
  • leetcode-05 最长回文子串
    题目描述:给你一个字符串 s,找到 s 中最长的回文子串。解法一:中心扩散法思想:令左右指针指向同一个元素,然后向两边扩散,并记录下最长长度(L)以及对应的起始位置(index)......
  • 力扣---1616. 分割两个字符串得到回文串
    给你两个字符串a和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标分割开。由a可以得到两个字符串:aprefix和asuffix,满足a=aprefix+asuffix,......
  • 算法 -- 分割两个字符串得到回文串
    分割两个字符串得到回文串提示中等114相关企业给你两个字符串a和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标分割开。由a可以得到两个字符......
  • django返回文件(无论什么格式的)给前端
    读取文件方法:defread_file(file_name,chunk_size=512):withopen(file_name,"rb")asf:whileTrue:c=f.read(chunk_size)......
  • 算法随想Day50【动态规划】| LC647-回文子串、LC516-最长回文子序列
    LC647.回文子串动态规划法:遍历顺序:从下往上,从左往右当s[i]与s[j]相等时,需要考虑三种情况:情况一:下标i与j相同,同一个字符例如a,当然是回文子串情况二:下标i与j相差......
  • 647. 回文子串
    题目647回文子串给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成......
  • 回文数!
    //需求:给你一个整数x,如果x是一个回文整数,打印ture,否则,返回false。//解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。//例如:121是回文数,而123不......
  • 回文数
    1importjava.util.*;23publicclassMain{4publicstaticvoidmain(Stringargs[]){5into,t,th,f,before,behind=0;6for(int......