本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/40555783

Longest Common Prefix

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

算法是自己想的,虽然有点啰嗦,但是肯定是对的。

希望继续努力,不断提高算法的质量。每天都有所进步,加油。

算法实现代码如下:

	public static String longestCommonPrefix(String[] strs) {
		if (strs.length == 0)
			return "";
		String min = strs[0];
		if (min.length() == 0)
			return "";
		if (strs.length == 1)
			return min;

		for (int i = 1; i < strs.length; i++) {
			if (min.length() > strs[i].length())
				min = strs[i];
		}

		StringBuffer buff = new StringBuffer();
		boolean flag = false;
		for (int i = 0; i < min.length(); i++) {
			char c = min.charAt(i);
			for (int j = 0; j < strs.length; j++) {
				if (strs[j].length() != 0) {
					if (strs[j].charAt(i) == c) {
						flag = true;
						continue;
					} else {
						flag = false;
						return buff.toString();
					}
				}
			}

			if (flag) {
				buff.append(c);
			}
		}
		return buff.toString();
	}

网上公认较好的解题算法如下所示:

public String longestCommonPrefix(String[] strs) {
		if (strs.length == 0)
			return "";
		int size = strs.length;
		int j = 0;
		int minlength = strs[0].length();

		// find the min length of strings
		for (String s : strs) {
			if (s.length() < minlength) {
				minlength = s.length();
			}
		}

		// take substrings, put into a HashSet. if HashSet size >1, reduce the
		// lengh of substrings;
		while (j < minlength) {
			HashSet<String> h = new HashSet<String>();
			for (int i = 0; i < size; i++) {

				h.add(strs[i].substring(0, minlength - j));
				if (h.size() > 1)
					break;

			}
			if (h.size() == 1)
				return strs[0].substring(0, minlength - j);
			j++;

		}
		return "";
	}

Leetcode_14_Longest Common Prefix的更多相关文章

  1. [LeetCode] Longest Common Prefix 最长共同前缀

    Write a function to find the longest common prefix string amongst an array of strings. 这道题让我们求一系列字符串 ...

  2. 【leetcode】Longest Common Prefix

    题目简述: Write a function to find the longest common prefix string amongst an array of strings. 解题思路: c ...

  3. LintCode 78:Longest Common Prefix

      public class Solution { /** * @param strs: A list of strings * @return: The longest common prefix ...

  4. [LintCode] Longest Common Prefix 最长共同前缀

    Given k strings, find the longest common prefix (LCP). Have you met this question in a real intervie ...

  5. 14. Longest Common Prefix

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

  6. Leetcode Longest Common Prefix

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

  7. [LeetCode] 14. Longest Common Prefix

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

  8. No.014:Longest Common Prefix

    问题: Write a function to find the longest common prefix string amongst an array of strings. 官方难度: Eas ...

  9. [转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀

    题记: 这道题不难但是很有意思,有两种解题思路,可以说一种是横向扫描,一种是纵向扫描. 横向扫描:遍历所有字符串,每次跟当前得出的最长公共前缀串进行对比,不断修正,最后得出最长公共前缀串. 纵向扫描: ...

随机推荐

  1. 微信内置浏览器 如何小窗不全屏播放视频?也可以尝试canvas.

    设置属性: <video height="100%" width="100%" autoplay="autoplay" control ...

  2. C# 制作屏保(图片位置随机变化)

    最近无所事事,闲着无聊,在网上翻看资料时碰巧看到了屏保制作,根据大神的思路也理解到屏保也不是很难.因此根据我自己的理解,动手谢了一个屏保. 首先,打开VS2010创建一个Windows窗体应用程序,名 ...

  3. JS的replace默认只替换第一个匹配项

    1. JS的replace默认只替换第一个匹配项. 解决方法: 使用正则表达式进行匹配替换[   ①.replace(new RegExp(②,"g") ,③);   ] ①:包含 ...

  4. 用go实现常用算法与数据结构——队列(queue)

    queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到.一个典型的队列如下图(图片来自 segmentfault): 可以看出队列和我们日常生活中排队是基本一致的.都遵循 FIFO(F ...

  5. MongoDB 查询分析

    MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具. MongoDB 查询分析常用函数有:explain() 和 hint(). 使用 explain() expla ...

  6. 两行代码搞定Android视图扩散切换效果

    用最简单的方式来实现Android视图扩散切换效果. 一.概述 这两天时间动手撸了个视图扩散切换效果的控制器,API兼容至Android4.0,更方便我们在视图切换过程中有炫酷的过渡效果.本来是想实现 ...

  7. webpack 将不同类型的文件输出到不同文件夹

    参考:https://stackoverflow.com/questions/33058964/configure-webpack-to-output-images-fonts-in-a-separa ...

  8. Nagle算法

    简介 Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息:这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率.Nagle算法于1 ...

  9. frameset 与frame 设置的技巧

    今天来写点不一样的.如下图: 实现的效果就是原生的类似于导航形式的frameset. frameset 注意: 包含frameset的网页应该只是作为框架而存在,所以不能有body标签. 这个标签可以 ...

  10. [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/releas ...