• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

【LeetCode】Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

java code : 预处理出最短串与任意一字符串的公共前缀,用StringBuilder保存,再去遍历剩余字符串,从尾处开始推。

复杂度O(m * n)  m : length of the arrays, n :length of the prefix

 

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
         int numofstr = strs.length;
		 if(numofstr < 1)
			 return new String("");
		 if(numofstr == 1)
			 return strs[0];
		 StringBuilder res = new StringBuilder();
		 String minlen = strs[0];
		 int indexmin = 0;
		 for(int i = 1; i < numofstr; i++)
		 {
			 if(minlen.length() > strs[i].length())
			 { minlen = strs[i];indexmin = i;}
		 }
		 String str1 = strs[0];
		 String str2 = strs[1];
		 int index2 = 1;
		 if(minlen.equals(strs[0]))
		 {
			 str1 = minlen;
			 str2 = strs[1];
		 }
		 else
		 {
			 str1 = minlen;
			 str2 = strs[0];
			 index2 = 0;
		 }
		 int i = 0, j = 0;
		 while(i < str1.length() && j < str2.length())
		 {
			 if(str1.charAt(i) == str2.charAt(j))
			 {
				 res.append(str1.charAt(i));
				 i++;j++;
				 continue;
			 }
			 break;
		 }
		 if(numofstr < 3 || res.length() == 0)
			 return res.toString();
		 for(int k = 0; k < numofstr; k++)
		 {
			 if(k == indexmin || k == index2)
				 continue;
			 int len = res.length();
			 String cur = strs[k];
			 while(len > 0 && (cur.charAt(len - 1) != res.charAt(len - 1)))
			 {
				 res.deleteCharAt(len - 1);
				 len--;
			 }
			 
		 }
		 return res.toString();
        
    }
}


 

 

posted @ 2013-10-29 22:34  Class Xman  阅读(176)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3