https://oj.leetcode.com/problems/longest-common-prefix/
Write a function to find the longest common prefix string amongst an array of strings.
解题思路:
这题属于比较简单的基本题目。我采用的方法是,从第一位起,比较数组中每个字符串的该位,如果和第一个字符串的该位不同,就立刻返回该位之前的字符串,如果当前位数大于该字符串长度,也立刻返回该字符串。否则继续往后。
下面的方法,是一个two pass的方法,可以先找出最短的那个字符串,省得后面判断长度。
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0){ return ""; } int minLength = strs[0].length(); for(String str : strs){ if(str.length() < minLength){ minLength = str.length(); } } for(int i = 0; i < minLength; i++){ char record = strs[0].charAt(i); for(String str : strs){ if(str.charAt(i) != record){ return str.substring(0, i); } } } return strs[0].substring(0, minLength); } }
下面是一个one pass的方法,遇到当前i超过自身长度的,直接返回自身即可。
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0){ return ""; } // int minLength = strs[0].length(); // for(String str : strs){ // if(str.length() < minLength){ // minLength = str.length(); // } // } for(int i = 0; ; i++){ if(i > strs[0].length() - 1){ return strs[0]; } char record = strs[0].charAt(i); for(String str : strs){ if(i > str.length() - 1){ return str; } if(str.charAt(i) != record){ return str.substring(0, i); } } } // return strs[0].substring(0, minLength); } }