leetcode刷题笔记十四 最长公共前缀 Scala版本

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))
原文地址:https://www.cnblogs.com/ganshuoos/p/12709763.html