这个专题的内容是字符串,其实之前我们已经做了很多字符串类型的题,只不过是渗透到每一个专题里面的
1.最长公共前缀
题目来源:14. 最长公共前缀 - 力扣(LeetCode)
这道题的思路很简单,因为题目要求的是数组中所有字符串的最长公共前缀,所以我们只需要固定第一个字符串,然后遍历后面的字符串,检查一下每个字母相不相等就好了
有一个需要注意的点,我们只需要检查前n个字母就好了,这里的n是所有字符串中最短字符串的长度,所以在开始遍历之前,我们需要先记录一下最短字符串的长度
具体代码如下:
2.最长回文子串
题目来源:5. 最长回文子串 - 力扣(LeetCode)
这道题可以通过双指针来解决,从某一点开始,一个指针向左,一个指针向右,比较一下对应的字母是否相等,相等的话继续往下遍历,在比较的过程中还需要保证指针的大小不能超过字符串的范围,每次遍历完后,与已经记录的最长回文子串的长度对比一下,如果长度大于已存的最长长度,那就更新一下
这里有一个需要注意的细节点:当字符串的长度是奇数和偶数时,我们指针的初始值需要稍微改变一下
假设我们一开始设置left=i,right=left+1时,可以分别用奇偶字符串来模拟一下
当字符串是偶数时,这种统计法没有问题,当字符串为奇数时,这种统计方法会导致无法统计到所有情况
同理可以知道,当我们让left=i,right=left时,奇字符串是没有问题的,偶字符串就会导致统计的情况不完全
所以我们需要用两种初始化的方法都统计一遍
具体代码如下:
3.二进制求和
题目来源:67. 二进制求和 - 力扣(LeetCode)
这种以字符串进行运算的题目也可以叫做高精度算法,由于字符串本身结构的原因,这里的a[0]和b[0]都是最高位,为了方便我们进行代码的编写,最好先进行逆序一下,这里逆序后,要记得最后将ret也逆序一下
根据题目的意思,我们可以暴力对每个位进行相加,因为涉及到进位的关系,我们可以定义一个sign变量,来记录一下是否要进位
原理是通过循环来遍历两个字符串,因为两个字符串的长度不一定相等,因此当一个字符串结束后就应该退出循环,然后再将另一个字符串的内容加到后面就好了
具体代码如下:
4.字符串相乘
题目来源:43. 字符串相乘 - 力扣(LeetCode)
这道题同样是高精度运算,所以我们同样可以继续采用逆序那一套
题目的意思很简单,用两个字符串进行相乘
如果用字符串来储存两位相乘的结果,我们无法分辨哪几个字符是一位
所以我们可以用一个数组来储存每一位最终计算的结果
需要注意的是,这里的结果并没有进行进位,进位将在最后进行统一的处理
那么这个数组要多大呢?
这取决于我们的数一共有多少位
以两个三位数为例
假设两个三位数都是999
可以发现,位数最多是两个数的位数进行相加,又由于最后要考虑进位的原因
所以我们只需要申请num1.size()+num2.size()-1的大小就好了
具体代码如下:
以上就是本篇文章的全部内容了,如果对你有帮助,可以点个赞支持一下,感谢各位的观看
TA 关注的仓库 - 陌染青云 (mo-ran-qingyun) - Gitee.com
这是我个人的gitee 仓库,账号上文章的代码都会发到仓库里,有兴趣可以看一下