Leetcode 14 : Longest Common Prefix
2016-09-29 08:10
411 查看
Q:Write a function to find the longest common prefix string amongst an array of strings.
分析:
一个字符数组的最长公共前序。例如”abcdsa”,”a”,”abcjd”的公共前序就是”a”,不难见得,最长公共前序是由最短的字符串来决定的,那么可以如下的一种思路:
1.求得前两个字符串的公共前序,存为ans
2.如果字符串数组中的字符串的长度小于ans的长度,则进行比对,求得新的公共前序ans,否则不进行比较。
也就是说,例如,“abcdefg”,”abcd”,”abcdef”,”abc”
“abcdefg”与”abcd”的公共前序为”abcd”,记为ans
ans的长度为4,那么ans与字符串”abcdef”比较时,由于字符串”abcdef”的长度为5,而ans的长度为4(最长公共前序是由最短的字符串来决定的),所以不需要进行比较,直接与下一个字符串”abc”进行比较,由于字符串”abc”的长度小于ans(”abcd”),则一次进行比对,求得新的公共前序,并存为ans。
有如下代码(未优化,并未AC,超时):
AC代码:
这种方法空间时间复杂度很小
参考:
http://www.cnblogs.com/springfor/p/3872316.html
分析:
一个字符数组的最长公共前序。例如”abcdsa”,”a”,”abcjd”的公共前序就是”a”,不难见得,最长公共前序是由最短的字符串来决定的,那么可以如下的一种思路:
1.求得前两个字符串的公共前序,存为ans
2.如果字符串数组中的字符串的长度小于ans的长度,则进行比对,求得新的公共前序ans,否则不进行比较。
也就是说,例如,“abcdefg”,”abcd”,”abcdef”,”abc”
“abcdefg”与”abcd”的公共前序为”abcd”,记为ans
ans的长度为4,那么ans与字符串”abcdef”比较时,由于字符串”abcdef”的长度为5,而ans的长度为4(最长公共前序是由最短的字符串来决定的),所以不需要进行比较,直接与下一个字符串”abc”进行比较,由于字符串”abc”的长度小于ans(”abcd”),则一次进行比对,求得新的公共前序,并存为ans。
有如下代码(未优化,并未AC,超时):
public class LongestCommonPrefix { public String longestCommonPrefix(String[] strs) { if(strs.length<=0 || strs==null) return " "; String ans = strs[0]; if(strs.length==1) return ans; int i,j ; for(i=1 ; i<strs.length;i++){ if(ans.length()>strs[i].length()){ //公共前序的长度大于字符串的长度时,需要进行比对,求得新的公共前序 for(j=0;j<strs[i].length();++j){ //逐一比对 if(strs[i].charAt(j)!=ans.charAt(j)) //发现不想同的字符则停止 break; } //新的公共前序 ans = String.valueOf(strs[i].subSequence(0,j)); } } return ans; } }
AC代码:
这种方法空间时间复杂度很小
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0 || strs == null) return ""; for(int i=0;i<strs[0].length();i++){ char x = strs[0].charAt(i); for(int j=1;j<strs.length;j++){ if(strs[j].length()==i || strs[j].charAt(i)!=x) return strs[0].substring(0,i); } } return strs[0]; } }
参考:
http://www.cnblogs.com/springfor/p/3872316.html
相关文章推荐
- LeetCode-Easy部分中标签为String 14. Longest Common Prefix
- LeetCode-14. Longest Common Prefix
- LeetCode 14: Longest Common Prefix
- LeetCode *** 14. Longest Common Prefix
- [Leetcode]14. Longest Common Prefix
- [LeetCode]#14 Longest Common Prefix
- leetcode14 Longest Common Prefix
- [leetcode 14] Longest Common Prefix
- leetcode 14. Longest Common Prefix
- 【leetcode c++】14Longest Common Prefix
- LeetCode----- 14.Longest Common Prefix
- Leetcode 14. Longest Common Prefix
- [LeetCode]14. Longest Common Prefix
- [leetcode] 14. Longest Common Prefix
- 【LeetCode】14. Longest Common Prefix
- LeetCode14:Longest Common Prefix
- 014_LeetCode_14 Longest Common Prefix 题解
- LeetCode 14 - Longest Common Prefix
- LeetCode 14 Longest Common Prefix
- [LeetCode]--14. Longest Common Prefix