No.014:Longest Common Prefix
问题:
Write a function to find the longest common prefix string amongst an array of strings.
官方难度:
Easy
翻译:
寻找一个字符串数组的最长公共前缀。
方法一:
- 数组长度为0,返回空字符串。
- 将数组第一项,作为初始的公共前缀。
- 从数组第二项开始进入循换,整理当前字符和当前前缀字符的长度。
- 以小长度的字符串为基准,从头开始逐个匹配,遇到不同的字符时,更新前缀字符。
- 为防止完全匹配情况,如“aa”匹配“aaa”。由于不存在不同的字符,所以不会更新的情况,设定更新标志位flag,当flag为false时,将前缀字符更新为小长度字符。
- 在内循环结束之后,若得到的前缀字符长度为0,直接跳出整个循环。
- 外循环可以使用foreach循环。
方法一的解题代码:
private static String method(String[] strs) {
String prefix = strs.length == 0 ? "" : strs[0];
// 从数组第二项开始遍历
for (String compare : strs) {
// 整理长度
String s1 = prefix.length() > compare.length() ? compare : prefix;
String s2 = prefix.length() > compare.length() ? prefix : compare;
boolean flag = false;
for (int j = 0; j < s1.length(); j++) {
if (s1.charAt(j) != s2.charAt(j)) {
prefix = prefix.substring(0, j);
flag = true;
break;
}
}
// 防止完全匹配的情况
if (!flag) {
prefix = s1;
}
if (prefix.length() == 0) {
break;
}
}
return prefix;
}
method
方法二:
- 其实,String类自带了String.startWith()的实例方法,来判断一个字符串是否以另一个字符串为开头的形式。使用这种方法可以进一步地增强效率。
- 在内循环中,判断当前字符是否匹配当前前缀,若不是消去前缀字符串的最后一个字符,直到匹配成功。
- 注意入参检查。
方法二的解题代码:
public static String longestCommonPrefix(String[] strs) {
if (strs == null) {
throw new IllegalArgumentException("Input error");
}
String prefix = strs.length == 0 ? "" : strs[0];
for (String compare : strs) {
while (!compare.startsWith(prefix)) {
// 不匹配,消去前缀最后一项
prefix = prefix.substring(0, prefix.length() - 1);
}
if (prefix.length() == 0) {
break;
}
}
return prefix;
}
longestCommonPrefix
相关链接:
https://leetcode.com/problems/longest-common-prefix/
PS:如有不正确或提高效率的方法,欢迎留言,谢谢!
No.014:Longest Common Prefix的更多相关文章
- LeetCode专题-Python实现之第14题:Longest Common Prefix
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode第[14]题(Java): Longest Common Prefix
题目:最长公共前缀 难度:EASY 题目内容: Write a function to find the longest common prefix string amongst an array o ...
- LeetCode OJ:Longest Common Prefix(最长公共前缀)
Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...
- LeetCode 14: Longest Common Prefix
Longest Common Prefix Write a function to find the longest common prefix string amongst an array of ...
- 【LeetCode】LeetCode——第14题:Longest Common Prefix
14. Longest Common Prefix My Submissions Question Editorial Solution Total Accepted: 97052 Total Sub ...
- # Leetcode 14:Longest Common Prefix 最长公共前缀
公众号:爱写bug Write a function to find the longest common prefix string amongst an array of strings. If ...
- leetcode【14题】Longest Common Prefix
题目:Longest Common Prefix 内容: Write a function to find the longest common prefix string amongst an ar ...
- No.014 Longest Common Prefix
14. Longest Common Prefix Total Accepted: 112204 Total Submissions: 385070 Difficulty: Easy Write a ...
- 【JAVA、C++】LeetCode 014 Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. 解题思路: 老实遍历即可, ...
随机推荐
- [Spring框架]Spring JDBCTmplate基础入门总结.
前言:前面有讲过 Spring IOC以及AOP的基本使用方法, 这里就再来讲下Spring JDBCTemplate的使用方法. 一, 概述这里先说一下Spring 整合的一些模板: 从上图中可以看 ...
- Atitit 知识图谱的数据来源
Atitit 知识图谱的数据来源 2. 知识图谱的数据来源1 a) 百科类数据2 b) 结构化数据3 c) 半结构化数据挖掘AVP (垂直站点爬虫)3 d) 通过搜索日志(query record ...
- 每天一个linux命令(36):diff 命令
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- 通过telnet来实践HTTP协议。
这是一篇实践教程,能够让你更加深刻的理解HTTP协议,因此需要一定的HTTP基础. 协议:一种规定,规定了你应该怎么去做,如w3c规定了浏览器应该怎么去解析HTML,CSS,JS.而HTTP则规定了客 ...
- 【WP 8.1开发】如何把自定义字体塞进应用里
或许,系统自带的字体不足以体现应用程序的魅力,对于表现极强的汉字来说,更是如此.这时候,我们就会想,要是能把网上下载的艺术字体塞到应用包中,那岂不美哉?那么,这可以实现吗?答案是Yes的. 接下来,阿 ...
- Floyd算法(一)之 C语言详解
本章介绍弗洛伊德算法.和以往一样,本文会先对弗洛伊德算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3 ...
- Unity3d知识体系思维导图
整理了一下U3D的技能树.
- 可视化工具solo show-----Prefuse自带例子GraphView讲解
2014.10.15日以来的一个月,挤破了头.跑断了腿.伤透了心.吃够了全国最大餐饮连锁店——沙县小吃.其中酸甜苦辣,绝不是三言两语能够说得清道的明的.校招的兄弟姐妹们,你们懂得…… 体会最深的一句话 ...
- isDebugEnabled有什么用?
这几天在读Spring MVC源码时,发现了如下代码: if (logger.isDebugEnabled()) { logger.debug("Using ThemeResolver [& ...
- Cordova webapp实战开发:(4)Android环境搭建
在<Cordova webapp实战开发:(3)后面可能会学到的东西>中我们说了一下后续大致包括的内容,今天我们继续.上周我在掌中广材集成了友盟的社交分享,今天想集成iOS应该很顺利的,但 ...