leetcode刷题笔记十四 最长公共前缀 Scala版本
源地址:最长公共前缀
问题描述:
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
.
简要思路分析:
比较简单的方法是水平扫描法。选择长度较短的字符串作为标准,与剩余字符串前缀进行比较,通过移动字符判断合适的前缀但是这种复杂度较高。或者从较短的字符串的位置比较,判断其他串的位置是否一致,如果是,则加入公共前缀。比较巧妙的方法是通过对str进行比较,str比较的原则是字符串的顺序,通过min和max筛选出差距最明显的两个字符串,寻找他们的公共字符串即可。下面是大佬的一行解决办法。
代码补充:
object Solution {
def longestCommonPrefix(strs: Array[String]): String = {
return strs.foldLeft("")((_,_)=>(strs.min,strs.max).zipped.takeWhile(v => v._1 == v._2).unzip._1.mkString)
}
}
知识补充:
1.foldLeft
参考https://blog.csdn.net/qq_29677083/article/details/84436462
2.takeWhile 与 where 对比
Where会选取所有满足条件的集合;
TakeWhile会选取满足条件的集合,遇到不满足条件的会中止搜索
3.zipped 与 unzip
val test=("aaaaaaaaa","aaaaaabbbbb").zipped.takeWhile(v => v._1 == v._2) println(test) console: List((a,a), (a,a), (a,a), (a,a), (a,a), (a,a)) val test1 = test.unzip println(test1) console: (List(a, a, a, a, a, a),List(a, a, a, a, a, a))