解题思路: 看到这个题目我立刻就想到了KMP算法了,但是仔细一琢磨,这道题又还没到需要使用KMP算法的地步,应该使用基本的暴力法就能解决,但是思路又模模糊糊,于是乎我点开了注解,好家伙,我直接好家伙,一堆代码直接怼上来,各种i、j、k、m、l、n.......我真的是佛了,于是打开浏览器,找到了这篇文章,我读完代码,思路也就紧跟着出来了,人家代码里也有l、k但是人家一行注释打上去我瞬间就明白这些变量的含义。
说了这么多,就是想说,写代码时,注释的重要性有时候要远远超过代码本身,如何衡量一份代码的优秀,最重要的标准之一就是你把代码扔给一个陌生人,在你不在他身边指导情况下他能完全明白、看懂你的代码,这才是好的代码该具备的因素。写注释是必须的,变量的定义尽量做到见名知义,不要上去就是一堆i、j、k、m、l、n......,通篇下来一个汉字都看不到,这样的代码全世界真的只有你自己看得懂,真的就是垃圾代码,即便题目做对了、你把代码分享出来了,也得不到大家的尊重和认可。
总的来说,不要觉得写注释是浪费时间,有时候写注释也是检验自己对代码、对题目本身、对算法到底理解到了什么地步,当你连一行注释都写不出的时候反而说明了你自己都不理解这代码为什么要这么写,你自己都说服不了你自己,你怎么还能说服别人呢?
参考代码:
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <math.h> void handleString(char strOne[], char strTwo[]) { //求出两个字符串的长度 int sizeOfOne = strlen(strOne), sizeOfTwo = strlen(strTwo); int l = 0, k = 0;//替代变量,往下看就知道干嘛用的了 int sum = 0;//记录连续相等字符的长度 int max = 0;//记录最大连续相等字符,也就是最终的答案 //开始循环比对 for (int i = 0; i < sizeOfOne; ++i) { for (int j = 0; j < sizeOfTwo; ++j) { //把i、j保留下来,毕竟这是循环变量不能随便乱动,我们使用i、j的替身k、l来做一些操作 k = i; l = j; sum = 0;//当前连续相等字符长度为0 //如果两个字符串当前下标对应的字符相等而且下标都没有越界 while (strOne[k] == strTwo[l] && k < sizeOfOne && l < sizeOfTwo) { sum++;//发现一个字符相等就加1 //接着看下一个字符是否相等,这里就看出k、l作为i、j替身的作用了 k++; l++; //什么时候下标会超出边界呢?当两个字符串一模一样时,循环的结束条件就是变量超出边界 } //一直循环直到字符不相等或者下标超出了合法范围就结束循环 if (sum > max){ //查看当前的sum是否要比max大 max = sum; } } } printf("%d", max); } int main() { //定义变量 char strOne[100] = {'\0'}, strTwo[100] = {'\0'}; //输入字符串的内容 gets(strOne); gets(strTwo); //调用函数,开始干活 handleString(strOne, strTwo); return 0; }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复