LeetCode 14 Longest Common Prefix(最长公共前缀)(String)
2015-10-16 22:05
736 查看
翻译
写一个函数(或方法)来寻找一个字符串数组中的最长公共前缀。原文
Write a function to find the longest common prefix string amongst an array of strings.
注释
"abcdefg" "abcdefghijk" "abcdfghijk" "abcef" 上面的字符串数组的最长公共前缀就是"abc"。
分析
如下图所示,第一步就是要找出该字符串数组中的最短字符串的长度及其序列。第二步,用for循环从第一个字符串到最后一个字符串依次做比较,具体步骤如下:
外层for循环中用i表示字符串长度,从minSize一直可以递减到0
初始result即为最短字符串(通过minIndex确定)的前i个字符
内层for循环中用j表示字符串数组中的索引,依次递增。j等于minIndex时不做操作(因为为同一个字符串不必比较)
否则通过临时字符串temp来获取索引为j的字符的前i个字符
需要所有的temp都与result相等
如果j和len相等了,说明已经遍历完所有的字符串
每次判断的字符串长度缩减之后都更新result
public class Solution { public string LongestCommonPrefix(string[] strs) { int len = strs.Length; if(len == 0) return ""; string result = ""; int minSize = 100000; int minIndex = 0; if(len == 1){ result = strs[0]; return result; } for(int i = 0; i < len; i++){ int size = strs[i].Length; if(size < minSize){ minSize = size; minIndex = i; } } for(int i = minSize; i >= 0; i--){ result = strs[minIndex].Substring(0,i); int j = 0; for(; j < len; j++){ if(j == minIndex) continue; string temp = strs[j].Substring(0,i); if(result != temp) break; } if(j == len) return result; } return result; } }
updated at 2016/09/17
其实注意到这里只是求公共前缀,前缀,而不是整个字符串数组内的公共字符串,这就容易得多了。只要将字符串排序,因为都是字母字符,所以这也能达到非常好的效果。
然后只要以此比较即可。
public String longestCommonPrefix(String[] strs) { StringBuilder prefix = new StringBuilder(); if (strs != null && strs.length > 0) { Arrays.sort(strs); char[] a = strs[0].toCharArray(); char[] b = strs[strs.length - 1].toCharArray(); for (int i = 0; i < a.length; i++) { if (b.length > i && b[i] == a[i]) { prefix.append(b[i]); } else { return prefix.toString(); } } } return prefix.toString(); }
相关文章推荐
- 进程间通信-共享内存
- 机器学习:介绍及分类 (1)
- Qt使用MinGW编译,如何忽略警告
- 数据结构之链表(链接)
- 找球号(一)(STL)
- 易语言的注册表操作
- 自动登录多个IDC机房(expect+shell)
- C++11 in Qt5
- 集合,链表的意义
- UFT工具简介
- 双基回文数
- 定量/高光谱遥感之——传感器定标
- org.json.JSONException:End of input at character 0 of
- clr
- 顺序表的操作
- 大端模式和小端模式
- 20135210程涵——第六周学习总结
- 先序遍历的非递归算法
- Spring MVC 中 HandlerInterceptorAdapter过滤器的使用
- android 19 activity纵横屏切换的数据保存与恢复