Leetcode刷题记(5)——最长公共前缀
巴拉巴拉~
上了一下午的分布式算法,好难受啊!完全不知道老师在讲什么,可还是要继续听着做笔记,不然课下看着英文版的课件更是崩溃!!!
继续刷题,现在的感受真的是,自己也太菜了吧,好多基本的东西都忘了,不知道可以有什么函数使用,每次想解题思路都是最笨最直接的那种,淡定淡定,欠下的总是要还的,谁让自己以前太水了!
搬运工~
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
解题:看到题目第一眼的感觉是我艹这就开始用到动态规划了!怎么这么熟悉,冷静下来一看这个只是最长公共前缀,比起最长公共子序列简单了不止一点!第一个想法就是暴力遍历吧!
两层循环:第一层限制在第一个元素的长度下,第二层就是字符串数组的个数。
【1】定义一个字符串类型的变量用来存储公共前缀,在循环里每次取出第一个字符串的一个字符,然后去遍历数组里后面几个元素的字符串检查是否在相同下标下有相同的字符;
只要有不一样的或者已经超出了元素长度,就输出当前的前缀变量,否则就将该字符添加到前缀变量中,然后继续遍历。
想法很简单也很直接,可是写代码的时候竟然下不去手!又一次被leetcode中直接甩出的vector变量吓住了,不知道字符串上的方法能不能使用,又开始百度~
【2】字符串里有很多可以直接使用的方法呀!在这里子串substr()必须拥有姓名!
不用再重新定义一个字符串类型的变量,因为数组里的第一个字符串的子串本身就是前缀!!
直接两层循环遍历,直到某下标位置处的字符已经不再一致,此时就输出第一字符串从0到该下标处的子串即可!!!如果遍历完就说明就是第一个元素本身。
要考虑重新把c++的书看一遍了,最基础的东西不能丢哇!!!