[C++]
-
代码分析:vector cnt(26, 0);
答:这行代码的含义是创建一个大小为 26 的整型向量cnt,并且给每个元素赋初值 0。也就是说,cnt向量有 26 个元素,每个元素初始值都是 0。 -
vector什么意思?
答:vector是C++标准库中的一个容器类模板。
它可以用来创建动态数组,即长度可变的数组。vector提供了方便的方法来管理数组的大小和元素的访问。与传统的静态数组不同,vector可以根据需要动态地增加或缩小其大小。 使用vector,我们可以在运行时添加、删除和访问元素,而不需要事先指定数组的大小或重新分配空间。 例如,vector<int>定义了一个存储整数的动态数组,而vector<char>定义了一个存储字符的动态数组,以此类推。 -
char类型在内存中是以ASCII码形式存储的,每个字符对应一个唯一的ASCII码值。对于小写字母,它们的ASCII码是连续的,从 'a' 开始,依次递增。 因此,如果char x = 'b',则x - 'a'的结果是1。因为字符 'b' 的ASCII码值是98,字符 'a' 的ASCII码值是97,所以98 - 97等于1。
[Java]
charAt(i)是字符串类型的方法,用于获取指定索引位置上的字符。参数i表示要获取的字符所在的索引位置。
[js]
- 代码分析:const cnt = new Array(26).fill(0);
答:创建了一个名为
cnt的数组,长度为 26,并将每个元素的初始值都设置为 0。
[Golang]
-
代码分析:cnt := [26]int{}
答:创建了一个长度为 26 的整数数组cnt,并将每个位置的元素初始化为 0。 -
代码分析:for i := 0; ; i++
答:这个循环是一个无限循环,因为循环条件省略了。它使用变量i作为索引,从 0 开始递增。 -
代码分析 for _, ch := range s 代表循环遍历字符串
s中的每个字符,并将每个字符赋值给变量ch。在这里,使用_忽略了每个字符的索引,只关注字符本身。
[Android]
- 使用Gradle下载包gradle-7.3.3-all.zip特别慢怎么办?
- 使用国内镜像:https://mirrors.cloud.tencent.com/gradle/
找到项目文件下的这个路径:~\android\gradle\wrapper\gradle-wrapper.properties 打开文件,替换掉如下位置的代码。(前提是腾讯镜像里面有的包)
[算法]
1.KMP算法是什么?
KMP算法(Knuth-Morris-Pratt算法)是一种用于在字符串中寻找子串的高效算法。它的思想是利用已经匹配过的部分信息,避免在不必要的情况下进行重复的比较。 简单来说,KMP算法通过构建一个匹配表(也称为部分匹配表),根据已经匹配的部分信息,指导下一次的匹配过程。这个匹配表保存了在子串中,每个位置之前的子串中有多长的公共前后缀。 在进行匹配时,KMP算法遵循以下步骤:
a. 构建匹配表:根据子串本身的特性,计算每个位置之前的子串中的最长公共前后缀的长度,并存储在匹配表中。
b. 进行匹配:遍历主串和子串,当发现不匹配时,根据匹配表中的信息,调整子串的位置,而不是重新比较主串和子串的相同位置。这样可以避免无效的比较,提高匹配效率。 通过利用匹配表进行指导,KMP算法能够跳过一些明确不匹配的情况,以线性时间复杂度(O(m+n))进行字符串匹配,相比传统的暴力匹配算法(时间复杂度O(m*n)),KMP算法具有更高的效率。 总结起来,KMP算法通过预处理构建匹配表,利用已经匹配的部分信息来指导后续的匹配过程,以提高字符串匹配的效率。
- 动态规划?
就在于拆分子问题,记住过往,减少重复计算
举个例子:
- A : 1+1+1+1+1+1+1+1 =?
- A : 上面等式的值是多少
- B : 计算"8"
- A : 在上面等式的左边写上"1+"呢?
- A : 此时等式的值为多少
- B : 很快得出答案"9"
- A : 你怎么这么快就知道答案了
- A : 只要在8的基础上加1就行
- A : 所以你不用重新计算,因为你记住了第一个等式的值为8!动态规划算法也可以说是"记住求过的解来节省时间"