问题 C: 字符串匹配

题目描述

这天,喜欢学习的小 B 学到了跟字符串有关的算法,也就是字符串匹配。但是这个字符串匹配的算法跟常见的匹配有所不同,它回传的讯息是两个字符串当中有几个位置的字符是相同的,我们称为「同位置字符串匹配」。举例来说,"NPSC"跟"NTU"这两个字符串(不含双引号)的同位置字符串匹配是 1,因为两者的相同之处只有第⼀个字符 N是相同的。而" abcdabc "跟" abcdcba"(不含双引号)的同位置字符串匹配是 5,因为这两个字符串在第 1,2,3,4,6 这五个位置的字符是⼀样的。

现在,刚学完这个新潮字符串算法的小 B 兴致勃勃地研究出了同位置字符串匹配的进阶版本:给定 n 个字符串 s1,s2,··· ,sn,求出这 n 个字符串当中两两字符串的「同位置字符串匹配」结果的加总。换句话说,假设两个字符串 a,b 的同位置字符串匹配是 f(a,b),那么小 B 的算法可以求出

(也就是 (f(s1,s2) + f(s1,s3) + ··· + f(s1,sn)) + (f(s2,s3) + f(s2,s4) +··· + f(s2,sn)) + ··· + (f(sn−1,sn)) )是多少。

由于小 B 无法验证他写的这个新算法的程序是否正确,于是小 B 前来寻求你的帮助。请帮助他算出每⼀笔问题的答案,让小 B 知道他的程序是否正确。

输入

输⼊的第⼀行是⼀个整数 n,代表字符串的数量。接下来的 n 行,每⼀行有⼀个字符串 si。

输出

请输出小 B 新研究出的算法对于这 n 个字符串作为输入的输出

样例输入 Copy
复制代码
【输入样例1】
2
NTU
NPSC

【输入样例2】
5
meow
Meow
MEOW
MeoW
meoW
样例输出 Copy
复制代码
【输出样例1】
1

【输出样例2】
20
提示

【数据规模】

  • 1 ≤ n ≤ 106
  • 每个字符串的长度均介于 1 到 106 之间
  • 每个字符串均只包含大写英文字母、小写英文字母或是数字
  • 所有字符串的长度加总不会超过 5 × 106

只要检查每个位置相同的字符各自有多少个,然后累加计算

(再也不随便乱看T-T。。。。

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
string s[1000009];
ll ans=0;
ll jab(ll x){
	return (x-1)*x/2;
}
int main(){
	cin>>n;
	for(int i=0;i<n;++i)cin>>s[i];
	int l=1;
	while(l){
		int f=0,c1[30]{0},c2[30]{0},c3[30]{0};
		for(int i=0;i<n;++i){
			if(s[i].length()<l)continue;
			f=1;
			char x=s[i][l-1];
			if(x>='a'&&x<='z')c1[x-'a']++;
			else if(x>='A'&&x<='Z')c2[x-'A']++;
			else c3[x-'0']++;
		}
		for(int i=0;i<26;++i){
			ans+=jab((ll)c1[i]);
			ans+=jab((ll)c2[i]);
			ans+=jab((ll)c3[i]);
		}
		if(!f)break;
		l++;
	}
    cout<<ans;
	return 0;
}
相关推荐
wuweijianlove8 小时前
算法性能的渐近与非渐近行为对比的技术4
算法
_dindong8 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志8 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
沫璃染墨8 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
黎阳之光8 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
skywalker_118 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia8 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg9 小时前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
_日拱一卒9 小时前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾9 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio