leecode刷题(19)-- 最长公共前缀
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
思路:
这道题我用的是暴力破解的方法,遍历字符串数组,依次比较每个字符,如果都相等,则长度加一再比较,如果不相等,则返回之前的字符。
代码如下:
class Solution { public String longestCommonPrefix(String[] strs) { if (strs.length == 0) return ""; StringBuilder res = new StringBuilder(); for (int i = 0; i < strs[0].length(); i++) { int j = 1; for (; j < strs.length; j++) { if (strs[j].length() <= i || strs[0].charAt(i) != strs[j].charAt(i)) { return res.toString(); } } if (j == strs.length) { res.append(strs[0].charAt(i)); } } return res.toString(); } }
几个知识点
1. StringBuilder :
String 类是字符串常量,是不可更改的常量。而 StringBuffer 是字符串变量,它的对象是可以扩充和修改的。
所以我们在这里使用 StringBuffer 可以避免每次添加字符时都要 new 一个新对象。
2. 字符串数组中字符的定位:
字符串数组即形如这样的数组:
String[] res = {"abc", "def", "ghi"}
。比如我们找 "abc" 这个字符串,可以直接写:
res[0]
,但是如果我们要找 "abc" 中的 a,那我们应该怎样写呢?如果写成
res[0][0]
,在 C++ 中是没有问题的,但是在 java 中会报错:array required, but String found。我们在 java 中应该写成:
res[0].charAt(0)
。
官方题解
官方有更好的方法,看了确实很好,帮助很大,这道题的解题思路不唯一:官方题解 。
来源:https://www.cnblogs.com/weixuqin/p/10422147.html