首页 > 其他分享 >Acwing秋季每日一题补题---搜索字符串

Acwing秋季每日一题补题---搜索字符串

时间:2023-12-14 21:23:15浏览次数:22  
标签:cnt hash int --- 补题 字符串 Acwing

搜索字符串

题目链接

思路:

字符串哈希+滑动窗口
当然因为符合题意的子串会重复,所以我们要考虑去重的问题

代码:

#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long

const int N=2e5+10;
const int P=131;

char a[N],b[N];//字符串
int cnt[26];//统计字符个数
int  h[N],p[N];//hash,离散化

int get(int l,int r){
	return h[r]-h[l-1]*p[r-l+1];
}

void solve(){
	scanf("%s%s",a+1,b+1);
	int n=strlen(a+1);
	int m=strlen(b+1);
	p[0]=1;
	for(int i=1;i<=m;i++){
		p[i]=p[i-1]*P;
		h[i]=h[i-1]*P+b[i];
	}//对字符串b进行离散化(hash)

	for(int i=1;i<=n;i++){
		cnt[a[i]-'a']++;

	}

	int t=0;
	unordered_set<int> hash;

	for(int i=0;i<26;i++){
		if(!cnt[i]){
			t++;
		}
	}
	for(int i=1;i<=m;i++){
		int x=b[i]-'a';
		cnt[x]--;
		if(cnt[x]==0){
			t++;

		}
		else if(cnt[x]==-1){
			t--;

		}
		if(i>n){
			int s=b[i-n]-'a';
			cnt[s]++;
			if(cnt[s]==0){
				t++;

			}
			else if(cnt[s]==1){
				t--;

			}
		}
		if(t==26){
			hash.insert(get(i-n+1,i));

		}
	}
	cout<<hash.size()<<endl;
	return ;
	

}

signed main(){
	int t=1;
	while(t--){
		solve();
	}
	return 0;

}

标签:cnt,hash,int,---,补题,字符串,Acwing
From: https://www.cnblogs.com/du463/p/17902038.html

相关文章

  • fastapi-cdn-host发布了 -- FastAPI接口文档/docs页面空白的问题,现在很好解决了~
    代码地址:https://github.com/waketzheng/fastapi-cdn-host如何安装:pipinstallfastapi-cdn-host使用方法:fromfastapiimportFastAPIfromfastapi_cdn_hostimportmonkey_patch_for_docs_uiapp=FastAPI()monkey_patch_for_docs_ui(app)#增加这行就能解决/docs页面空......
  • 2023-2024-1学期20232316《网络空间安全导论》第六章学习总结
    第六章应用安全基础应用安全概述应用安全是什么应用安全是为保障各种应用系统在信息的获取、存储、传输和处理各个环节的安全所涉及的相关技术的总称。应用安全的核心支撑技术是密码技术。应用安全技术的基础和关键技术是系统安全技术与网络安全技术。身份认证是保障应用......
  • 2023-2024 20231313《计算机基础与程序设计》第十二周学习总结
    2023-202420231313《计算机基础与程序设计》第十二周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十二周学习总结作业内容《C语言程序设计》第11章并完成云班课测试作业正文我的作业目录教材总结总结学习过程中的问题《C语言程......
  • 2023-12-14 npm和yarn无法拉取依赖,cnpm可以 ==》切换镜像源
    这两天遇到个问题,是关于依赖无法拉取的问题,尽管我有三分猜到了是什么原因,但我还是不肯往那个方向思考,哎,真是死牛一便颈。如,我要给前端项目装个express框架,用npm装,装了大半天一点反应都没有,用yarn装就直接报网络无法连接,如图: 用cnpm装就没问题,秒过。注意:我的电脑是能正常上网......
  • Docker使用手册--给你通用常用命令
    卸载JDKrpm-qa|grep-ijavarpm-qa|grep-ijava|xargs-n1rpm-e--nodeps安装JDKtar-zxvfjdk-8u351-linux-x64.tar.gzvim/etc/profileexportJAVA_HOME=/home/jdk/jdk-11.0.19exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:$......
  • 2023-2024-1 20231320 《计算机基础与程序设计》第十二周学习总结
    2023-2024-120231320《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十二周作业)这个作业的目标<自学《C语言程序......
  • 2023-2024-1 20232301 《网络》第六周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:对于习题中“如果针对差分你的一个统计查询是否可以无限制的进行重复查询?为什么?”这个问题经思考无果,存在困难问题1解决方案:询问chatgpt,得到了以下答案:在差分隐私(DifferentialPrivacy)的上下文中,无限制地进行重复查询是不可......
  • 2023-2024-1学期20232423《网络空间安全导论》第六周学习总结
    教材学习——应用安全基础应用安全概述云计算造成了数据所有权和管理权的分离,在以下两方面开展持续研究:云计算基础设施的可信性、云数据安全保障。工业互联网:形成跨设备、跨系统、跨厂区、跨地区的互联互通,推动整个制造服务体系智能化。数据汇集到云端,要保证系统的可靠运行,......
  • 无涯教程-Java - asin()函数
    该方法返回指定双精度值的反正弦值。asin()-语法doubleasin(doubled)这是参数的详细信息-d - 双精度数据类型。asin()-返回值此方法返回指定双精度值的反正弦。asin()-示例publicclassTest{publicstaticvoidmain(Stringargs[]){doub......
  • uni-app开发PDA获取内容不全
    问题:现在有一个问题是,Input在捕获pda输入内容时,会出现输入数据不全,文本内容被截断的情况。二维码内的数据稍稍多一点,就会出现输入内容不全,字符被截断的情况(这还是限于二维码内容只是非中文的情况)。如果二维码的内容包含中文的话,输入的数据差异就会更大。简直无法和原二维码码内的......