LeetCode-探索-初级算法-字符串-9. 最长公共前缀(个人做题记录,不是习题讲解)
LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/
- 最长公共前缀
-
语言:java
-
思路:如果长度>0,那么先找出最短串,然后循环String数组,比对每个String和该串开头最多相同几个。最后取所有串相似程度最小值,然后获取最短串的子串。
-
代码(2ms):
class Solution { public String longestCommonPrefix(String[] strs) { int arr_len = strs.length; if(arr_len==0) return ""; int[] min_len = new int[2]; int[] same = new int[arr_len]; min_len[0] = strs[0].length(); for(int i = 1; i < arr_len; ++i){//找出最短串的长度和下标 if(min_len[0]>strs[i].length()){ min_len[0] = strs[i].length();//长度 min_len[1] = i;//下标 } } for(int i = 0;i < arr_len; ++i){ for(int j = 0; j < min_len[0]; ++j){ if(strs[i].charAt(j)==strs[min_len[1]].charAt(j)) ++same[i]; else break; } } Arrays.sort(same); return strs[min_len[1]].substring(0,same[0]); } }
-
参考代码(0ms):这个等于上来直接求每个串的相同子串,如果子串下标为0,说明开头有部分相同,如果子传下标不是0,则要么完全不同,要么为空字符串“”;如果不是空字符串,就一直截取子串直到开头相同的部分,然后继续与下一个串比对。
class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0){ return ""; } String str = strs[0]; for (int i = 0; i < strs.length; i++) { while (strs[i].indexOf(str) != 0 ){ str = str.substring(0, str.length() - 1); if(str.isEmpty()){ return ""; } } } return str; } }
-
参考后重写(0ms):
class Solution { public String longestCommonPrefix(String[] strs) { int len = strs.length; if(len==0) return ""; String res = strs[0]; for(int i = 1; i < len; ++i){ while(strs[i].indexOf(res)!=0){ res = res.substring(0,res.length()-1); if(res.length()==0) return ""; } } return res; } }