【字符串】1.最⻓公共前缀(easy)
1.最⻓公共前缀(easy)
- 题⽬描述:
- 解法:
- 算法思路:
- 解法⼀(两两⽐较):
- 算法代码:
- 解法⼆(统⼀⽐较):
- 算法代码:
题⽬链接:14. 最⻓公共前缀
题⽬描述:
编写⼀个函数来查找字符串数组中的最⻓公共前缀。
如果不存在公共前缀,返回空字符串 “”。
⽰例 1:
输⼊:strs = [“flower”,“flow”,“flight”]
输出:“fl”
⽰例 2:
输⼊:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输⼊不存在公共前缀。
提⽰:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由⼩写英⽂字⺟组成
解法:
算法思路:
解法⼀(两两⽐较):
我们可以先找出前两个的最⻓公共前缀,然后拿这个最⻓公共前缀依次与后⾯的字符串⽐较,这样就可以找出所有字符串的最⻓公共前缀。
算法代码:
class Solution{public String longestCommonPrefix(String[] strs) {// 解法⼀:两两⽐较String ret = strs[0];for(int i = 1; i < strs.length; i++){ret = findCommon(strs[i], ret);}return ret;}public String findCommon(String s1, String s2) {int i = 0;while(i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i)) i++;return s1.substring(0, i);}
}
解法⼆(统⼀⽐较):
题⽬要求多个字符串的公共前缀,我们可以逐位⽐较这些字符串,哪⼀位出现了不同,就在哪⼀位截⽌。
算法代码:
class Solution{public String longestCommonPrefix(String[] strs) {// 解法⼆:统⼀⽐较for(int i = 0; i < strs[0].length(); i++){char tmp = strs[0].charAt(i);for(int j = 1; j < strs.length; j++){if(i == strs[j].length() || strs[j].charAt(i) != tmp)return strs[0].substring(0, i);}}return strs[0];}
}