标签: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