描述:
Write a function to find the longest common prefix string amongst an array of strings.思路:
有两种思路:1.从0向最大的公共前缀长度进行,i=0,即每次从0循环至strs.length,所有的字符都相等,则count++,直至有一个字符不相同为止,循环终止
2.假设 longest common prefix 等于字符串数组的最短字符串的长度,从0循环至strs.length,在前面最长公共最大长度的基础上比较相邻两个串的最大公共子串
个人感觉还是第一种思路更好,用到的额外存储空间更少,时间也更短
代码:
思路1:从0向最大的公共前缀长度进行,i=0,即每次从0循环至strs.length,所有的字符都相等,则count++,直至有一个字符不相同为止,循环终止
public String longestCommonPrefix(String[] strs) {
if(strs==null)
return null;
String str=new String("");
if(strs.length==0)
return str;
if(strs.length==1)
return strs[0];
int min=strs[0].length();
int len=0;
for(int i=1;i<strs.length;i++)
{
len=strs[i].length();
min=min<len?min:len;
}
char temp='0';
int count=0,i=0,j=0;
boolean flag=true;
for(i=0;i<min;i++)
{
temp=strs[0].charAt(i);
flag=true;
for(j=1;j<strs.length;j++)
{
if(temp!=strs[j].charAt(i))
{
flag=false;
break;
}
}
if(flag)
count++;
else
break;
}
return strs[0].substring(0,count);
}
思路二:假设 longest common prefix 等于字符串数组的最短字符串的长度,从0循环至strs.length,在前面最长公共最大长度的基础上比较相邻两个串的最大公共子串
public String longestCommonPrefix(String[] strs) {
if(strs==null)
return null;
String str=new String("");
if(strs.length==0)
return str;
if(strs.length==1)
return strs[0];
int min=strs[0].length();
int len=0;
for(int i=1;i<strs.length;i++)
{
len=strs[i].length();
min=min<len?min:len;
}
int count=min,i=0,j=0;
for(i=1;i<strs.length;i++)
{
for(j=min-1;j>=0;j--)
{
if(!strs[i-1].substring(0,j+1).equals(strs[i].substring(0,j+1)))
{
count--;
}else
break;
}
min=count;
}
return strs[0].substring(0,count);
}