欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

2019-03-5-算法-进化(最长公共前缀)

发布时间:2023/12/4 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2019-03-5-算法-进化(最长公共前缀) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入: ["flower","flow","flight"] 输出: "fl"

示例 2:

输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

我的初版解决思路为遍历数组,挨个字符进行比较,直到结束。代码如下:

//循环遍历,有两种退出条件: 1,数组最短元素 2,数组内String相同位置字符不同public String longestCommonPrefix(String[] strs) {if(strs == null || strs.length ==0) {return "";}StringBuilder sb = new StringBuilder();boolean toEnd = false;for(int i=0;;i++) {if(toEnd) {break;}for(String arr:strs) {if(i >= arr.length()) {//1,数组最短元素if(sb.length()>i) {sb.deleteCharAt(i);}toEnd =true;break;}if(sb.length()<=i) {sb.append(arr.charAt(i));}else if(sb.charAt(i) != arr.charAt(i)) {//2,数组内String相同位置字符不同sb.deleteCharAt(i);toEnd =true;break;}}}return sb.toString();}

采用水平扫描法进行优化

举例:

最终优化代码如下:

public String longestCommonPrefix(String[] strs) {if(strs == null || strs.length ==0) {return "";}String prefix = strs[0];for(int i=0;i<strs.length;i++) {while(strs[i].indexOf(prefix) != 0) {prefix = prefix.substring(0, prefix.length()-1);if(prefix.isEmpty()) {return "";}}}return prefix;}

代码简洁清晰了很多。
持续精进,加油!

总结

以上是生活随笔为你收集整理的2019-03-5-算法-进化(最长公共前缀)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。