字符串
文章平均质量分 54
动态规划
hnjzsyjyj
这个作者很懒,什么都没留下…
展开
-
洛谷 P1058 [NOIP2008 普及组 T4]:立体图 ← 字符串、坐标变换
●解题思路:先把“积木形式”存在数组中,然后按照“从下往上,从后往前,从左往右”的顺序依次覆盖,之后输出即可。覆盖顺序来源于实际的模拟。原创 2024-07-18 22:34:42 · 377 阅读 · 0 评论 -
数字 0~9 与 字符 ‘0‘~‘9‘ 之间的相互转换
若 x 为数字 0~9 中的一个,'x' 为字符 '0'~'9' 中的一个,则 x 与 'x' 之间具有相互转换的关系。即,x+'0' 得到字符 '0'~'9' 中的一个,'x'-'0' 得到数字0~9 中的一个。原创 2024-07-16 00:43:10 · 160 阅读 · 0 评论 -
洛谷 P1055 [NOIP2008 普及组 T1]:ISBN 号码
● 若 x 为数字 0~9 中的一个,'x' 为字符 '0'~'9' 中的一个,则 x 与 'x' 之间具有相互转换的关系。即,x+'0' 得到字符 '0'~'9' 中的一个,'x'-'0' 得到数字0~9 中的一个。● 若给定字符串 str,则在下面代码中,for 循环的循序变量 i 的上界为 str.size()-1。这是因为字符串 str 的第 str.size()-1 位的值需要进行计算求得。原创 2024-07-16 00:11:00 · 590 阅读 · 0 评论 -
AcWing 1633:外观数列
● 整数 d → 字符 ‘d‘ 的转换代码为:d+‘0‘。● 语句 string s="", s+=d+'0'; 不能写成 string s+=d+'0'; 语句,否则系统会提示 s 没有初始化。当然,语句 string s="", s+=d+'0';等价于string s=to_string(d);原创 2024-07-11 12:41:04 · 398 阅读 · 0 评论 -
字符 ‘d‘ → 整数 d 的转换代码为:‘d‘-‘0‘
字符 'd' → 整数 d 的转换代码为:'d'-'0'原创 2024-07-11 11:49:31 · 140 阅读 · 0 评论 -
整数 d → 字符 ‘d‘ 的转换代码为:d+‘0‘
整数 d → 字符 'd' 的转换代码为:d+'0'原创 2024-07-11 11:05:41 · 306 阅读 · 0 评论 -
C++ 中 strcmp(a,b) 函数的用法
●若 len(a)>len(b),则返回1。●若 len(a)==len(b),则返回0。●若 len(a)原创 2024-04-30 13:58:28 · 272 阅读 · 1 评论 -
【经典代码】统计字符串中各字符个数 ← string
利用 (char)(i+'a') 将 0~25(i 的取值)转换为对应的 'a'~'z'原创 2024-03-11 21:53:28 · 1174 阅读 · 1 评论 -
AcWing 493:笨小猴 ← 字符串
数组模拟邻字符串中字符的计数:设字符串为 s,则 s[i] 是 'a'~'z' 中的某个字符,显然 s[i]-'a' 的值为 0~25 中的某个值。故可声明一个数组 a[26],用于存储各个字符的值。即,a[0] 存储的是字符 'a' 出现的次数, a[1] 存储的是字符 'b' 出现的次数,……,a[25] 存储的是字符 'z' 出现的次数。在本代码中,字符串中各字符的出现次数用代码for(int i=0; i原创 2024-03-11 20:29:22 · 607 阅读 · 1 评论 -
求在主串中模式串重复出现的次数 ← KMP算法(重叠计算)
在本文 KMP 函数的定义中,只需在if(j==lent) 时,修改 j 的值,便可实现由不重叠(j=0)计算至重叠(j=ne[j])计算模式串在主串中出现的次数。题目“HDU 2087:剪花布条”,不重叠计算模式串在主串中出现的次数。(if(j==lent), j=0)题目“HDU 1686:Oulipo”,重叠计算模式串在主串中出现的次数。(if(j==lent), j=ne[j])原创 2023-11-06 11:46:52 · 337 阅读 · 2 评论 -
HDU 1686:Oulipo ← KMP算法(重叠计算)
1.常规定义的 KMP 函数,第一个参数为主串,第二个参数为模式串,但是本题中给出的样例是先输入模式串,再输入主串。故在本题中调用定义的 KMP 函数时,要注意参数顺序。2.本题中统计的是模式串在主串中重复出现的次数,故在 KMP 函数中,把在 if(j==lent) 时,不重复进行统计时的 j=0 修改为重复进行统计时的 j=ne[j]。3.实证知在 HDU 中不支持对 string 求长度,故可将如下代码中的 string 修改为字符数组后再提交至 HDU 进行测试。原创 2023-11-06 10:43:58 · 173 阅读 · 1 评论 -
洛谷 B2135:单词替换
字符串的算法设计题,若直接使用字符串提供的函数,会简单很多。本题可参考 POJ 3981(https://blog.csdn.net/hnjzsyjyj/article/details/134097986)的解法来做。其中,用到了字符串提供的 find 函数及 replace 函数。原创 2023-10-29 22:06:12 · 1000 阅读 · 2 评论 -
AcWing 4713:反转字符串
给定两个由小写字母构成的字符串 s 和 t,请你判断 s 的反转字符串是不是 t。原创 2023-10-29 08:54:20 · 205 阅读 · 0 评论 -
HDU 1062:字符串反转
注意:本文在利用 cin>>n 输入n之后,会有个换行符,这时需要用 getchar() 给它读入吸收掉,否则换行符将作为一个输入执行。原创 2023-10-29 08:15:24 · 341 阅读 · 0 评论 -
POJ 3981:字符串替换 ← C++
注意字符串的find函数及replace函数的用法。详见:https://cplusplus.com/reference/string/string/https://cplusplus.com/reference/string/string/find/原创 2023-10-28 23:54:43 · 376 阅读 · 1 评论 -
洛谷 P1303:A*B Problem(高精度×高精度)
之前,在博客https://blog.csdn.net/hnjzsyjyj/article/details/109219640中给出过一种高精度×低精度的代码,本文是高精度×高精度的代码。当然,若如https://www.acwing.com/problem/content/description/3126/题目所给的更大规模的数据,可考虑采用快速傅里叶变换(FFT)来求解。原创 2023-10-06 22:56:04 · 288 阅读 · 0 评论 -
AcWing 794:高精度除以低精度 ← vector
利用C++ STL vector实现高精度除法简洁、高效。原创 2020-10-22 16:02:49 · 1113 阅读 · 2 评论 -
AcWing 793:高精度乘法 ← vector
1.C++不支持大数运算,故而引入高精度算法。2.高精度乘法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1.length()-i-1]-'0';)3.对最高位做判断,删除前导0,然后输出便得结果。原创 2020-10-22 12:42:44 · 6069 阅读 · 5 评论 -
AcWing 792:高精度减法 ← vector
C++不支持大数运算,故而引入高精度算法。高精度减法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。原创 2020-10-19 17:06:34 · 3409 阅读 · 2 评论 -
AcWing 791:高精度加法 ← vector
1.C++不支持大数运算,故而引入高精度算法。2.高精度算法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1.length()-i-1]-'0';)3.对最高位做判断,然后输出便得结果。原创 2020-10-16 23:55:06 · 3995 阅读 · 0 评论 -
洛谷P5660:数字游戏 ← CSP-J 2019 复赛第1题
小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。原创 2023-09-24 08:49:00 · 289 阅读 · 0 评论 -
从下标1处开始输入字符串的一种 C++ 语法 ← scanf(“%s“,str+1);
从下标 1 处开始输入字符串的一种 C++ 语法:scanf("%s",str+1);由于下标从 1 开始,故求字符串的长度的C++ 语法为:strlen(str+1);其中,上文中的 str 为字符数组。原创 2023-09-23 21:23:43 · 789 阅读 · 0 评论 -
洛谷:P5015 标题统计 ← NOIP2018 普及组T1
因为,统计标题字符数时,空格和换行符不计算在内。所以,本题关键在于考察getline()函数的用法。原创 2023-07-14 13:46:02 · 310 阅读 · 0 评论 -
KMP算法的next数组与前缀表的关系
关于KMP算法的next数组,一些网文引入最长公共前后缀来进行分析,并认为前缀表就是next数组。事实上,这是不严谨的。并且,这种不严谨已经对学习求解KMP算法的next数组造成了混淆。通过观察可知,前缀表与next数组虽然是有关系的,但是它们不是一回事。不过,next数组可通过“将前缀表每一位都向右移动1位(最右位舍去)并在最左位补一个-1”得到。原创 2022-10-05 12:36:10 · 659 阅读 · 0 评论 -
求字符串中循环子串的长度 ← KMP算法
KMP算法中模式串T的next数组,是KMP算法的核心。KMP算法中的next数组仅取决于模式串本身,而与相匹配的主串无关。next数组的核心作用是“当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时),让模式串T的第next[j]位与主串S的第pos位再进行比较”。这相当于让模式串T往右移动了 j-next[j] 位后,再进行比较。原创 2022-10-05 17:43:21 · 763 阅读 · 2 评论 -
HDU 2087:剪花布条 ← KMP算法(不重叠计算)
众所周知,KMP算法中模式串T的next数组,是KMP算法的核心。next数组的核心作用是“当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时),让模式串T的第next[j]位与主串S的第pos位再进行比较”。这相当于让模式串T往右移动了 j-next[j] 位后,再进行比较。正是由于next数组的引入,使得KMP算法的效率大大优于BF算法。原创 2022-10-02 11:05:35 · 562 阅读 · 2 评论 -
李春葆、严蔚敏关于KMP算法的next数组值差1
在KMP算法的众多实现中,有多种定义next数组的方式。所以在使用和查看别人代码时,要特别注意KMP算法的next数组的定义,以免发生混淆。如:• 严蔚敏《数据结构》将模式串下标从1开始计数,故定义next[1]=0,next[2]=1;• 李春葆《数据结构》将模式串下标从0开始计数,故定义next[0]=-1,next[1]=0。原创 2022-09-29 21:55:50 · 857 阅读 · 1 评论 -
KMP算法 ← C++实现
KMP算法中模式串T的next数组,是KMP算法的核心。KMP算法中的next数组仅取决于模式串本身,而与相匹配的主串无关。next数组的核心作用是“当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时),让模式串T的第next[j]位与主串S的第pos位再进行比较”。这相当于让模式串T往右移动了j-next[j]位后,再进行比较。原创 2022-09-29 20:01:09 · 1489 阅读 · 1 评论 -
KMP算法 → 计算nextval数组
● 众所周知,KMP算法中模式串T的next数组,是KMP算法的核心。next数组的核心作用是“当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时),让模式串T的第next[j]位与主串S的第pos位再进行比较”。这相当于让模式串T往右移动了j-next[j]位后,再进行比较。原创 2022-09-29 14:07:25 · 5303 阅读 · 2 评论 -
KMP算法 → 计算next数组
若在KMP算法设计中,将模式串下标从0开始计数,则定义next[0]=-1,next[1]=0。那么求next数组的算法步骤为: (1)若第j-1位的字符与第x位的字符相等,则next[j]=x+1; (2)若直到第0位依然没有字符与第j-1位的字符相等,则next[j]=0。原创 2022-09-28 13:34:50 · 10641 阅读 · 4 评论 -
串的模式匹配算法 ← BF算法
【串的模式匹配算法之BF算法】● 将主串的第i个字符(初始时i=pos)和模式的第一个字符(j=0)比较,若相等,继续逐个比较后续字符(i++、j++);若不等,从主串的下一字符(i=i-j+1)起,重新与模式的第一个字符(j=0)比较。 ● 直到主串的一个连续子串字符序列与模式相等 。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。● 否则,匹配失败,返回值 0。原创 2022-09-25 22:37:11 · 1913 阅读 · 1 评论 -
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。......原创 2022-08-02 11:17:17 · 127 阅读 · 0 评论 -
C++之substr()函数的用法
C++之substr()函数的用法原创 2022-07-17 18:44:39 · 239 阅读 · 0 评论 -
字符串模式匹配之KMP算法 <- AcWing
【问题描述】给定一个主串S,以及一个模式串T。且所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串T在主串S中多次作为子串出现。求出模式串T在主串S中所有出现的位置的开始下标。【输入格式】第一行输入整数M,表示模式串T的长度。第二行输入模式串T。第三行输入整数 N,表示主串S的长度。第四行输入主串S。【输出格式】共一行,输出所有出现位置的开始下标(下标从 0开始计数),整数之间用空格隔开。【数据范围】1≤N≤10^51≤M≤10^6【输入样例】3aba5ababa【输出样例】原创 2021-09-16 15:48:06 · 427 阅读 · 1 评论