Problem:
Write a function to find the longest common prefix string amongst an array of strings.
Solution:
时间复杂度O(n)
题目大意:
给一个字符串数组,要找到这些字符串的最大前缀公共子串。
解题思路:
既然是公共子串,那每个字符串肯定都包含有,并且在头部,首先把第一个字符串作为默认最大,然后依次与后边每一个字符串对比,计算所有的最大匹配长度,长度最小的就是
Java源代码(用时263ms):
一涉及到字符串处理,Java消耗的时间就远远比别的语言大
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0)return ""; char[] str=strs[0].toCharArray(); int Min=str.length; for(int i=1;i<strs.length;i++){ char[] s=strs[i].toCharArray(); int j=0; while(j<Min && j<s.length && s[j]==str[j])j++; Min = Min>j?j:Min; } return strs[0].substring(0,Min); } }
C语言源代码(用时6ms):
char* longestCommonPrefix(char** strs, int strsSize) { char* str=strs[0]; int i,j; if(strsSize==0)return ""; for(i=1;i<strsSize;i++){ j=0; while(str[j] && strs[i][j] && str[j]==strs[i][j])j++; str[j]=0; } return str; }
C++源代码(用时8ms):
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if(strs.size()==0)return ""; char* str=(char*)malloc(sizeof(char)*(strs[0].size()+1)); for(int i=0;i<strs[0].size();i++){ str[i]=strs[0][i]; } str[strs[0].size()]=0; for(int i=1;i<strs.size();i++){ int j=0; while(str[j] && strs[i][j] && str[j]==strs[i][j])j++; str[j]=0; } return string(str); } };
Python源代码(用时66ms):
class Solution: # @param {string[]} strs # @return {string} def longestCommonPrefix(self, strs): if len(strs)==0:return "" str=strs[0] Min=len(str) for i in range(1,len(strs)): j=0;p=strs[i] while j<Min and j<len(p) and p[j]==str[j]:j+=1 Min = Min if Min<j else j return str[:Min]
时间: 2024-10-12 13:26:35