No.014:Longest Common Prefix
2024-10-19 02:26:45
问题:
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:如有不正确或提高效率的方法,欢迎留言,谢谢!
最新文章
- Java内存以及GC
- Linq解析带命名空间、前缀、Soap格式的XML
- java提高篇(八)----详解内部类
- css less
- 勾选checkbox之后,button按钮可用
- veridata实验例(5)在更改主键列值,update操作将被分成两个语句
- three.js是JavaScript编写的WebGL第 三方库
- 团队作业8——第二次项目冲刺(Beta阶段)--5.23 third day
- fatal: The remote end hung up unexpectedly
- [转]ORACLE分区表的使用和管理
- Flask开发微电影网站(八)
- 5. Go函数
- PAT L2-016 愿天下有情人都是失散多年的兄妹
- JavaSE 初学进度条JProgressBar
- python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))
- 把旧系统迁移到.Net Core 2.0 日记 (15) --Session 改用Redis
- MySQL数据库封装和分页查询
- 中国程序化购买广告解析:RTB/DSP/Ad Exchange/SSP/DMP,思维导图
- python单继沿用父类属性的两种方法
- How to input the newline in Numbers of Mac?