内容简介:编写一个函数来查找字符串数组中最长的公共前缀字符串。如果没有公共前缀,返回一个空字符串“”。示例1:
Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string "". Example 1: Input: ["flower","flow","flight"] Output: "fl" Example 2: Input: ["dog","racecar","car"] Output: "" Explanation: There is no common prefix among the input strings. Note: All given inputs are in lowercase letters a-z. 复制代码
翻译:
编写一个函数来查找字符串数组中最长的公共前缀字符串。
如果没有公共前缀,返回一个空字符串“”。
示例1:
输入:[“花”、“流”、“飞行”)
输出:“fl”
示例2:
输入:“狗”,“赛车”,“车”)
输出:”“
说明:输入字符串之间没有公共前缀。
注意:
所有给定的输入都是小写字母a-z。
解题思路
本题思路很简单,我们选定一个字符串(如果是最短的就最好了),然后根据循环,来一个个对比数组里面的字符串,一个个字符判断,来获取最短路径,找到符合条件的公共字符串,在和下一个比较,最终就是结果了
解题方法
-
第一种解体方法,按照我们的思路来编辑,代码如下
if (strs.length == 0) { return ""; } if (strs.length == 1) { return strs[0]; } String st = strs[0]; StringBuilder stringBuilder = new StringBuilder(""); for (int i = 0; i < st.length(); i++) { char s = st.charAt(i); for (int m = 1; m < strs.length; m++) { if (strs[m].length() <= i || strs[m].charAt(i) != s) { return stringBuilder.toString(); } } stringBuilder.append(s); } return stringBuilder.toString(); 复制代码时间复杂度: 该方案用了循环,循环层数为2,由于第二层判断计数不好记,设为M,外层循环为n,所以f(n)=(n*M)=Mn;所以O(f(n))=O(Mn),即T(n)=O(Mn)
空间复杂度: 该方案没有使用额外的空间,所以空间复杂度是O(1);
总结
本题的大致解法如上所诉,本题只想到了一种方法,本来想优化查找的,使用二分法来查找,但是想到了二分法的应用场景:更多是用于定位,而不是圈定范围,所以就放弃了这个想法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Responsive Web Design
Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00
From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!