编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,”flow”,”flight”] 输出: “fl” 示例 2:
输入: [“dog”,”racecar”,”car”] 输出: “” 解释: 输入不存在公共前缀。 说明:
所有输入只包含小写字母 a-z 。
有三种解法:
- 排队减尾法(从后往前)
- 排队比较法(从前往后)
- 噶韭菜法(从前往后循环,一次循环确定1位)
排队减尾法(从后往前)
class Solution {public String longestCommonPrefix(String[] strs) {if (strs.length == 0) return "";String ans = strs[0];// ans = str[0]// 遍历Str[1]···str[str.length-1]// 在遍历中,对str不停剪尾,直到str中不包含ans// 如果有一个减到头了,直接返回""for (int i = 1; i < strs.length; i++)while (strs[i].indexOf(ans) != 0) {ans = ans.substring(0, ans.length() - 1);if (ans.isEmpty()) return "";}return ans;}}
逐步收缩法
class Solution {public String longestCommonPrefix(String[] strs) {if(strs.length==0){return "";}String ans = strs[0];for(int i = 1;i < strs.length;i++){int j = 0;while(j < ans.length() && j < strs[i].length()){if(ans.charAt(j) != strs[i].charAt(j))break;j++;}ans = ans.substring(0, j);}return ans;}}
噶韭菜法(从前往后循环,一次循环确定这一位及之后的字符是否不可保留)
class Solution {public String longestCommonPrefix(String[] strs) {if (strs==null||strs.length==0) return "";//官网水平搜索for(int i=0;i<strs[0].length();i++){char c=strs[0].charAt(i);for(int j=1;j<strs.length;j++){if(i==strs[j].length() || strs[j].charAt(i)!=c)return strs[0].substring(0,i);}}return strs[0];}}
