题目链接:link

首先上思路:

如果一个字符串是回文串,只有当其中最多的只有一个字符的出现次数是奇数。

注意我们可以将每个字符串的字符出现次数的奇偶性用一个 \(26\) 位的二进制表示。

接下来就是是回文对的条件:

我们分为 \(2\) 种情况。

第一种情况:

两个字符串的二进制表示完全相同。那么也就是两个字符串的字符出现次数的奇偶性完全相同,所以拼接后的字符串中每个字符的出现次数都是偶数,所以它们可以构成回文串。

第二种情况:

两个字符串的二进制表示只有一位不相同。那么也就是拼接后的字符串也只有一个字符出现次数是奇数,所以它们也可以构成回文串。

最后就是统计回文串了!

我们可以使用哈希表 mp 用来记录每个二进制表示的出现次数。然后用 ct 来记录每个二进制表示可以匹配的次数。

那么最后的答案就是两种情况的和。

如果还不懂看看代码吧!

#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
#define i_will signed
#define ak main
#define IMO ()
#define int long long
I AK IOI;
/*mp 记录每个二进制表示的出现次数,ct 记录每个二进制表示可以被匹配的次数*/
unordered_map<int,int>mp,ct;
vector<int>v;//存储所有二进制表示
/*n 表示字符串数量,x 表示当前字符串的二进制表示,res 代表结果*/
int n,x,res;
i_will ak IMO{
cin>>n;
for(int e=1;e<=n;e++){
x=0;
string s;
cin>>s;
for(int i=0;i<s.size();i++)x^=(1<<(s[i]-'a'));//将字符串奇偶性记录到二进制表示中
v.push_back(x);
for(int i=0;i<26;i++)if(((x>>i)&1)==0)ct[(x+(1<<i))]++;//记录当前二进制表示仅有一位不同
mp[x]++;
}
for(auto e:mp)res+=e.second*(e.second-1)/2;
for(auto t:v)res+=ct[t];
cout<<res;
i_ak ioi;
}

时间复杂度:\(O(N\times L)\),其中 \(L\) 是字符串的平均长度。

空间复杂度:\(O(N)\)。

亲测可过,请勿抄袭!

题解:CF1045I Palindrome Pairs的更多相关文章

  1. 【题解】Palindrome pairs [Codeforces159D]

    [题解]Palindrome pairs [Codeforces159D] 传送门:\(Palindrome\) \(pairs\) \([CF159D]\) [题目描述] 给定一个长度为 \(N\) ...

  2. LeetCode 336. Palindrome Pairs

    原题链接在这里:https://leetcode.com/problems/palindrome-pairs/ 题目: Given a list of unique words, find all p ...

  3. DP VK Cup 2012 Qualification Round D. Palindrome pairs

    题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...

  4. 336. Palindrome Pairs(can't understand)

    Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that t ...

  5. leetcode 132 Palindrome Pairs 2

    lc132 Palindrome Pairs 2 大致与lc131相同,这里要求的是最小分割方案 同样可以分割成子问题 dp[i][j]还是表示s(i~j)是否为palindrome res[i]则用 ...

  6. leetcode 131 Palindrome Pairs

    lc131 Palindrome Pairs 解法1: 递归 观察题目,要求,将原字符串拆成若干子串,且这些子串本身都为Palindrome 那么挑选cut的位置就很有意思,后一次cut可以建立在前一 ...

  7. 【LeetCode】336. Palindrome Pairs 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 HashTable 相似题目 参考资料 日期 题目地 ...

  8. [LeetCode] Palindrome Pairs 回文对

    Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that t ...

  9. 【LeetCode】Palindrome Pairs(336)

    1. Description Given a list of unique words. Find all pairs of distinct indices (i, j) in the given ...

  10. Palindrome Pairs -- LeetCode 336

    Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that t ...

随机推荐

  1. python 读写csv文件(创建,追加,覆盖)

    读取csv文件 利用 csv.reader 可以读 csv 文件,然后返回一个可迭代的对象 csv_read,我们可以直接从 csv_read 中取数据 import csv def read_csv ...

  2. [源码系列:手写spring] AOP第一节:切点表达式

    在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP.         AOP即切面编程是Spring框架中的一个 ...

  3. 【Java】Math类的基本操作

    Math类 Math 类是数学操作类,提供了一系列的数学操作方法,包括求绝对值.三角函数等,在 Math 类中提供的一切方法都是静态方法(类方法),所以直接由类名称调用即可. Math类的基本操作: ...

  4. EntityFrameworkCore 中实体的几种配置方法

    使用数据注解 实体类通常是在Models目录下,直接在实体类上添加属性注解,比如[Required]/[Key]等. using System.ComponentModel.DataAnnotatio ...

  5. 【Guava】并发编程ListenableFuture&Service

    MoreExecutors directExecutor ExecutorService executor = Executors.newSingleThreadExecutor(); Settabl ...

  6. nodejs队列

    nodejs队列 创建具有指定并发性的队列对象.添加到队列的任务以并行方式处理(直到并发性限制).如果所有的worker都在进行中,任务就会排队,直到有一个worker可用.worker完成任务后,将 ...

  7. 时区转换工具+PWA离线网页

    时区转换工具+PWA离线网页 一.时区转换工具对比 工具 说明 Date 原生 JS API,有限的时区支持,无法指定时区,仅使用本地时区. Intl.DateTimeFormat 原生格式化显示,可 ...

  8. Web前端入门第 31 问:CSS background 元素背景图用法全解

    background 可设置背景色.渐变.背景图等,本文主要讲解背景图片的用法. 背景顾名思义就是背后的景色,始终居于元素背后,元素永远站在背景的身前. 本文示例中所使用的图片: background ...

  9. Scrcpy使用入门

    1.下载Scrcpy GitHub地址:https://github.com/Genymobile/scrcpy 网盘地址:https://pan.baidu.com/s/1NKosSkQJLbmhz ...

  10. Web前端入门第 34 问:CSS 常见布局

    Web 网页中,所有元素都是盒模型构成的,一个大盒子套一个或者多个小盒子,再用更大的盒子把大盒子给圈起来,这就构成了基本的 HTML 结构,再利用 CSS 把盒子装修得好看一些,最后把它放在正确位置, ...