题目:
Write a function to find the longest common prefix string amongst an array of strings.
官方难度:
Easy
翻译:
写一个函数,用来寻找一个字符串数组中的最长公共前缀。
思路:
1. 长度为0的数组直接退出,长度为1的数组直接返回第一项,一般处理至少长度为2.
2. 将第一个字符串作为现有的最长公共前缀,第二个字符串开始匹配,循环的长度是当前匹配字符串和目前的最长公共前缀的最小值。
3. 逐一匹配,遇到不同的字符,更新最长公共前缀,直接退出内循环。
4. 若最长公共前缀为空字符串"",直接返回,没必要做下面的循环。
解题中可能遇到的困难:
1. 养成好习惯,比较字符串用String.equals()方法,不要用"=="操作符。
解题代码:
1 private static String method(String[] array) { 2 // 特殊处理 3 if (array == null || array.length == 0) { 4 return ""; 5 } else if (array.length == 1) { 6 return array[0]; 7 } else { 8 String currentPrefix = array[0]; 9 // 从数组第二项开始遍历 10 for (int i = 1; i < array.length; i++) { 11 // 比较长度取较小者 12 int length = Math.min(currentPrefix.length(), array[i].length()); 13 // 出现长度为0的空字符串,不作处理,直接返回 14 if (length == 0) { 15 return ""; 16 } 17 StringBuffer sb = new StringBuffer(); 18 for (int j = 0; j < length; j++) { 19 // 记得用String.equals()方法 20 if (currentPrefix.substring(j, j + 1).equals(array[i].substring(j, j + 1))) { 21 sb.append(currentPrefix.substring(j, j + 1)); 22 } else { 23 // 遇到不一样,赋值退出 24 currentPrefix = sb.toString(); 25 // 匹配长度为0,直接返回 26 if (currentPrefix.length() == 0) { 27 return ""; 28 } 29 break; 30 } 31 } 32 } 33 return currentPrefix; 34 } 35 }
测试代码地址:
https://github.com/Gerrard-Feng/LeetCode/blob/master/LeetCode/src/com/gerrard/algorithm/easy/Q014.java
LeetCode题目地址:
https://leetcode.com/problems/longest-common-prefix/
PS:如有不正确或提高效率的方法,欢迎留言,谢谢!
时间: 2024-10-12 15:53:01