Longest Common Prefix Total Accepted: 24665 Total Submissions: 92370
Question
Solution
Write a function to find the longest common prefix string amongst an array of strings.
Show Tags
Have you met this question in a real interview? Yes No
SOULTION1:
解法就是扫一次。不过各种边界条件很容易出错。
1 public class Solution { 2 public String longestCommonPrefix(String[] strs) { 3 if (strs == null) { 4 return null; 5 } 6 7 if (strs.length == 0 || strs[0].length() == 0) { 8 return ""; 9 } 10 11 int len = strs[0].length(); 12 int i = 0; 13 for (; i < len; i++) { 14 char c = strs[0].charAt(i); 15 16 int j = 1; 17 for (; j < strs.length; j++) { 18 if (strs[j].length() <= i || c != strs[j].charAt(i)) { 19 break; 20 } 21 } 22 23 // there is err. 24 if (j < strs.length) { 25 break; 26 } 27 } 28 29 // The char i is invalid. 因为读到i时退出,所以不应包含i本身。 30 return strs[0].substring(0, i); 31 } 32 }
SOULTION2:
感谢大神的灵感http://blog.csdn.net/fightforyourdream/article/details/14642079
重新改写:
1 public class Solution { 2 //http://blog.csdn.net/fightforyourdream/article/details/14642079 3 public String longestCommonPrefix(String[] strs) { 4 if (strs == null) { 5 return null; 6 } 7 8 if (strs.length == 0) { 9 return ""; 10 } 11 12 String s = strs[0]; 13 int len = s.length(); 14 15 for (int i = 0; i < len; i++) { 16 char c = s.charAt(i); 17 18 for (int j = 1; j < strs.length; j++) { 19 if (strs[j].length() <= i || c != strs[j].charAt(i)) { 20 // The char i is invalid. 因为读到i时退出,所以不应包含i本身。 21 return s.substring(0, i); 22 } 23 } 24 } 25 26 // Didn't break, the whole String is valid. 27 return s; 28 } 29 }
请Floow主页君的GitHUB:
https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/string/LongestCommonPrefix.java