标签:longest common prefi substring
1.从0向最大的公共前缀长度进行,i=0,即每次从0循环至strs.length,所有的字符都相等,则count++,直至有一个字符不相同为止,循环终止
2.假设 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;
}
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);
}leetcode_Longest Common Prefix
标签:longest common prefi substring
原文地址:http://blog.csdn.net/mnmlist/article/details/45866639