首页 > 其他分享 >字符串

字符串

时间:2024-04-22 16:24:11浏览次数:24  
标签:遍历 int son maxn && 字符串

我要成为字符串领域大神!

trie树/字典树

image
字典树是什么思想?我们先设定一个根节点,一般为0,每次加入新字符串时都与其相连。比如我们要插入string,看起来就是这样
image
然后如果我们又插入一个strange,就会变成这样
image
也就是说插入的时候可以直接继承志曾经出现过的前缀部分,思想就是这么个思想
具体实现就是建一个二维数组son[maxn]k,son[i][j]表示以i为父节点,他的字符为j的子节点的编号。什么叫字符为j?简单来说就是将字符种类转换为数字。比如如果只有小写英文字母,我们就会把a到z转换为0到25,如果有小写和大写字母,就转换为0到51,以此类推。
对于每个插入,遍历字符串,存在则继续遍历,不存在就新建叶子结点。对于本题则每次遍历都给路径都加1,那样对于每个查询,遍历到结尾时结尾上的值就是答案个数。
多测每次对数组清空

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e6+10;
int t,idx;
int a[maxn],cnt[maxn],son[maxn][65];
char str[maxn];
int trans(char x)//transform
{
	if(x>='a'&&x<='z') return x-'a';
	if(x>='A'&&x<='Z') return x-'A'+26;
	if(x>='0'&&x<='9') return x-'0'+52;
}
void ins(char str[])//insert
{
	int p=0;
	for(int i=0;str[i];i++)
	{
		int now=trans(str[i]);
		if(!son[p][now]) son[p][now]=++idx;
		p=son[p][now];
		cnt[p]++;
		//cout<<cnt[p]<<endl;
	}
}
int query(char str[])
{
	int p=0;
	for(int i=0;str[i];i++)
	{
		int now=trans(str[i]);
		if(!son[p][now]) return 0;
		p=son[p][now];
	}
	return cnt[p];
}
int main()
{
	cin>>t;
	while(t--)
	{
		int n,q;
		scanf("%d%d",&n,&q);
		for(int i=0;i<=idx;i++)
		 for(int j=0;j<=64;j++)
		   son[i][j]=0;
		for(int i=0;i<=idx;i++)
		cnt[i]=0;
		idx=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%s",str);
			ins(str);
		}
		for(int i=1;i<=q;i++)
		{
			scanf("%s",str);
			printf("%d\n",query(str));
		}
	}
	return 0;
}

标签:遍历,int,son,maxn,&&,字符串
From: https://www.cnblogs.com/miku-dayo/p/18150849

相关文章

  • python中列表、字典和字符串的互相转换
    我们在python使用中经常会用到需要把字符串转为list或者字典,及把list或字典转为字符串(写文件,f.write()只能写字符串,插入数据库时,也只能用字符串)具体使用方法总结了一下:1、字符串转lists='a,b,c'l=s.split(',')  #把字符串s以逗号分割,分割出的list给到l ......
  • SQL Server 中将字符串按数字排序
    方法一:使用CAST或CONVERT我们可以使用CAST或CONVERT函数将字符串转换为数字,然后按照数字进行排序。示例如下:SELECT*FROMYourTableORDERBYCAST(YourColumnASINT)方法二:使用TRY_CAST或TRY_CONVERT如果我们不确定字符串中的所有值都可以成功转换为数字,我们可......
  • python os库将字符串转化为路径
    前言在python编程中,经常需要对文件进行读取操作,而os库提供了一些方法处理文件和目录的路径官方文档如下:https://docs.python.org/zh-cn/3/library/os.html本文主要记录如何将字符串转化为路径1.os.path.join()主要将多个字符串进行拼接,从而形成路径importosos.path.join......
  • 在 C 中打印字符串 - 如何在 C 中打印字符串
    打印字符串是编程中的一项基本操作。它帮助您输出信息,检查和调试您的代码,并向用户显示提示信息。在本文中,您将学习在C中打印字符串的一些不同技术。(本文视频讲解:java567.com)在C中字符串是什么?字符串是一系列字符,如字母、数字或符号,它们被组合在一起。它用于在程序中表示文......
  • 2024-04-21---真题--一个字符串中的最长重复子串(滑动窗口变种)
    真题-一个字符串中的最长重复子串(滑动窗口变种)题目:思路:首先这不是求公共子串,所以不需要动态规划记录。然后一个string相当于就是一个Char[],所以直接滑动窗口来枚举最好做。说白了,这道题就是求abc|abc的问题。其实就是可以看作是一个大的滑动窗口(包含两个小的窗口),并且大的窗口......
  • Python字节转换为字符串 - 如何将字符串转换为字节,以及反向转换
    你可以在Python中使用字节来表示二进制形式的数据。在本文中,你将学习如何将字节转换为字符串,以及反之亦然。在我们看转换之前,让我们谈谈Python中的字节是如何工作的。如果你已经理解了这一点,或者只是对转换感兴趣,你可以跳到下一节。(本文视频讲解:java567.com)Python中的字节是如......
  • 在C语言中如何找到字符串的长度
    在C语言中处理字符串时,你需要知道如何找到它们的长度。在许多情况下,找到C语言中字符串的长度都是至关重要的。你可能需要执行字符串操作,而许多字符串操作函数都需要字符串的长度作为参数。你可能还需要验证用户输入、比较两个字符串,或者动态管理和分配内存。在本文中,你将学习在......
  • 【转载】WPF中Binding使用StringFormat格式化字符串方法
    原文链接:https://www.cnblogs.com/xuliming/articles/StringFormat.htmlWPF中Binding使用StringFormat格式化字符串方法 货币格式<TextBlockText="{BindingPrice,StringFormat={}{0:C}}"/>//$123.46货币格式,一位小数<TextBoxText="{BindingPrice,Stri......
  • 1058 选择题(字符串处理)
    字符串处理我的噩梦。看dalao才写出来的,不过写的太久了,这个时长考试黄花菜都凉了。#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;#definelllonglongstringans[110];//答案个数intscore[110];//正确得分intperson[110];//每个人的得......
  • C++字符串常见混淆方案
    正文将字符串转换成等效int数组std::vector<uint32_t>convert_wstring_to_int_array(constwchar_t*str){std::vector<uint32_t>vec;for(size_ti=0;i<wcslen(str);i+=2){uint32_tval=(uint32_t)str[i]<<16&0xffff0000;i......