问题:

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

官方难度:

Easy

翻译:

寻找一个字符串数组的最长公共前缀。

方法一:

  1. 数组长度为0,返回空字符串。
  2. 将数组第一项,作为初始的公共前缀。
  3. 从数组第二项开始进入循换,整理当前字符和当前前缀字符的长度。
  4. 以小长度的字符串为基准,从头开始逐个匹配,遇到不同的字符时,更新前缀字符。
  5. 为防止完全匹配情况,如“aa”匹配“aaa”。由于不存在不同的字符,所以不会更新的情况,设定更新标志位flag,当flag为false时,将前缀字符更新为小长度字符。
  6. 在内循环结束之后,若得到的前缀字符长度为0,直接跳出整个循环。
  7. 外循环可以使用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

方法二:

  1. 其实,String类自带了String.startWith()的实例方法,来判断一个字符串是否以另一个字符串为开头的形式。使用这种方法可以进一步地增强效率。
  2. 在内循环中,判断当前字符是否匹配当前前缀,若不是消去前缀字符串的最后一个字符,直到匹配成功。
  3. 注意入参检查。

方法二的解题代码:

     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/

https://github.com/Gerrard-Feng/LeetCode/blob/master/LeetCode/src/com/gerrard/algorithm/easy/Q014.java

PS:如有不正确或提高效率的方法,欢迎留言,谢谢!

最新文章

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

热门文章

  1. Atitit.gui api自动化调用技术原理与实践
  2. fir.im Weekly - 600个 Android 开源项目汇总
  3. jquery 的队列queue
  4. Python装饰器详解
  5. CSS实现点击事件及实践
  6. Ext.util.TaskRunner定时执行任务
  7. 暴雪HASH算法(转)
  8. IO流-文件管理
  9. AngularJs bower install 卡主不动解决办法
  10. 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制