- 博客(13)
- 收藏
- 关注
原创 力扣383赎金信
思路:这道题是一个更为典型的哈希法,就是判断一个单词里的字母是不是在另外一个单词里面出现过。鉴于字母的个数有限,只有26个字母。我们采用数组作为我们的哈希表。我们初始化我们的hash[26]={0};用单词一来对哈希表初始化,hash[s1[i]-'a']++;用单词二来检验哈希表,在本题当中需要注意,单词一和单词二中都出现过的字母才会在单词二的过程中检验哈希表,也就是hash[s2[i]-'a']--;但是只出现过在单词二的单词就不用检验哈希表了。这点考虑到之后就没有问题了。
2024-09-03 21:23:32
33
原创 力扣28 KMP算法找出字符串中第一个匹配项的下标
我们用一个for循环来遍历文本串,循环变量是i,循环里边,我们用一个j来代表模式串的下标,要是haystack[i]!在之后,我们在检查j的大小,要是j的大小等于needle的长度的话,就说明找到了这样一个符合要求的子串,我们就应该返回一个下标了,这个下标就应该是i-j+1。但是这样就不是这道题所要考察的地方,这道题想要考察的地方是KMP算法,KMP算法相较于暴力算法,它拥有更低的时间复杂度,他的时间复杂度是O(m+n),空间复杂度是O(m),因为需要额外申请一个next数组,存放最长相同前后缀的长度。
2024-09-03 17:59:20
243
原创 力扣541反转字符串II
暴力解法的思考过程:我们要返回一个字符串ret,ret初始化为空。再判断总共有多少个2k长度的字符串,就是s.size()/2/k,然后用变量i遍历这些字符串,然后对于第i个长度为2k的字符串,用substr函数取出其前k个长度的子串,存到临时的变量temp当中temp=s.substr(i*2*k,k),然后利用reverse函数反转一下temp,之后将temp加到ret上,再取出后k个字符串,不用反转直接加到ret上。对于剩下的长度不够2k的串,分情况,要是小于等于k,就直接反转,再加到ret上即可。
2024-09-02 21:27:16
123
原创 力扣349,两个数组的交集
思路:这道题利用哈希表即可解决,因为他要看nums1里面的元素是否在nums2里面出现过,那么我们常说,判断元素是否在集合里面出现过,用的都是哈希表。考虑到这道题主要看的是数字出现过没有,不能用数组,用unordered_set ,不用set的原因是因为集合里面可以有重复的元素,那么就不能用set。我们先构造哈希表并用nums1初始化,unordered_set<int> hash(nums1.begin(),nums1.end());存在的话就直接放到ret当中,自动过滤重复的元素。
2024-09-02 15:29:28
137
原创 力扣59 螺旋矩阵II
一个内圈是9,当n=4时,我们手写一下就知道,还是两圈,外圈是1,2,3,4,5,6,7,8,9 ,10,11,12,内圈是,13,14,15,16.当n=5时,就是三圈,n=6还是三圈。那么外层循环的循环次数就是n/2次。2*(n-1-i*2)<=j<3*(n-1-i*2),填写的就是5,6那部分,那么ret[n-1-i][3*(n-1-i*2)-j+i]=k;n-1-i*2<=j<2*(n-1-i*2)填写的就是3,4那部分,那么ret[i+j-(n-1-i*2)][n-1-i]=k;
2024-09-02 15:17:39
171
1
原创 UNITY无法创建项目的两个解决方法
你可以换一个编辑器版本,换成一个LTS的版本的编辑器,因为LTS版的编辑器更加稳定。我就是这样创建成功的。最近也是打算学习一下unity,可是下载后无法创建新项目,最后我也是误打误撞的解决了问题,给。你可以注意一下你的编辑器版本,就是下面那张截图中中间最上方的编辑器版本。就是取消勾选之后还无法创建新项目的话,就是类似于下面这种情况。方法一:把勾选的这个版本管理给取消了。大家分享一下我的解决办法。
2024-01-30 17:40:57
2585
2
原创 谭浩强C语言第七章知识总结
第七章介绍了函数,建议在学习过第七章的知识后,我们再写代码时也要多用函数,因为函数实现了结构化的程序设计,便于日后的维护和优化
2023-01-05 16:17:42
472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人