zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    [通信] C# TCP实现多个客户端与服务端 数据 与 文件的传输
    [压缩]C#下使用SevenZipSharp压缩解压文本
    [通信] C#多线程Socket-文件传输
    [算法] N 皇后
    【算法】N Queens Problem
    [Eclipse]
    [C/C++] String Reverse 字符串 反转
    [SQL] 获取 Microsoft SQL Server 2008 的数据表结构
    [WIFI] WIFI 破解(初级)
    Unable to extract 64-bitimage. Run Process Explorer from a writeable directory
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/12709763.html
Copyright © 2011-2022 走看看