字符串
1. 概念
字符串就是特殊的字符数组,字符数组末尾的元素为 ‘\0’。和数组一样可以使用arr[i]或*(arr+i)来访问元素。
无论是用数组保存字符串(如:char arr[] = "Hello,World";),还是用指针保存字符串(如:char *brr = "Hello,World";),我们都可以使用字符串函数strlen(),来计算字符串长度。因为这里数组名和指针名保存着字符串在内存中的首地址,并且这里是字符串(存储时末尾有一个隐藏的'\0'),以 '\0' 结尾。这样,对于字符数组:使用sizeof(arr)/sizeof(arr[0]),求出来的长度比strlen求出的长度大1,因为sizeof计算数组大小时包含了'\0',strlen计算时忽略了'\0';对于字符串指针:sizeof(brr)/sizeof(brr[0])计算结果为4,因为brr是指针名,sizeof(brr)计算的是指针的大小为4,再除以元素大小1,所以结果为4。
————————————————
版权声明:本文为CSDN博主「加油JIAX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50803498/article/details/126528554
2. 解题技巧(我的总结)
1> 字符串分割
题目 | 说明 | 实现 |
---|---|---|
640. 求解方程 | 通过分割字符串统计x的系数和方程的常数项 | 我的提交 |
2> 字符串匹配
KMP算法:next数组
i, l := 1, 0for i < len(s) {if s[i] == s[l] {l++next[i] = li++} else {if l == 0 {next[i] = 0i++} else {l = next[l-1]}}}
题目 | 说明 | 实现 |
---|---|---|
686. 重复叠加字符串匹配 | KMP算法,如果直到i>ab长度之和都未匹配成功,则一定无法匹配 | 我的提交 |
210. 课程表 II | KMP算法 | 我的提交 |
3> 字符串问题分类讨论
题目 | 说明 | 实现 |
---|---|---|
809. 情感丰富的文字 | 使用双指针匹配,分类讨论所有情况 | 我的提交 |
816. 模糊坐标 | 分左右,分长度,再分首尾字母是否为0 | 我的提交 |
3> 字符串问题分类讨论
题目 | 说明 | 实现 |
---|---|---|
955. 删列造序 II | 从左到右按列讨论,抽象成单个字符串的情形,使用所有字符串做限制 | 我的提交 |
3. 更多练习
4. 参考
- LeetCode(力扣)初级算法 字符串篇
- 总库:tryHard