javascript實現:在N個字元串中找出最長的公子串

来源:https://www.cnblogs.com/trinitas/archive/2018/11/12/9945935.html
-Advertisement-
Play Games

1 'use strict' 2 3 function 找出最長公子串 (...strings) { 4 let arraiesOfSubStrings = [] 5 arrayOfStrings.reduce((accumulator, currentValue) => { 6 arraiesOf... ...


 

 1 'use strict'
 2 
 3 function 找出最長公子串 (...strings) {
 4     let arraiesOfSubStrings = []
 5     arrayOfStrings.reduce((accumulator, currentValue) => {
 6         arraiesOfSubStrings.push(findAllSubStringsFromTwoString(accumulator, currentValue))
 7         return accumulator
 8     })
 9     return findTheLongest(findIntersection(...arraiesOfSubStrings))
10 }
11 
12 function findIntersection (...sets) {
13     /**
14      *
15      *
16      * @param {sets} a list of sets
17      * @returns {array} the elements of the intersection of given sets.
18      */
19     return sets.reduce((accumulator, currentValue) => [...accumulator].filter(value => currentValue.has(value)))
20 }
21 
22 function findAllSubStringsFromTwoString (string1, string2) {
23     let string = string1.split(''),
24         nextString = string2.split(''),
25         currentSubString,
26         subStrings = new Set(),
27         nextFindStartPoint
28     for (let i_string = 0; i_string < string.length; i_string++) {
29         let character = string[i_string]
30         if (nextFindStartPoint === undefined) {
31             nextFindStartPoint = nextString.findIndex(function getIndexOfFirstFindedElement (element, index, array) {
32                 return element === character
33             })
34             if (nextString[nextFindStartPoint] === character) {
35                 currentSubString = currentSubString ? currentSubString + character : character
36                 subStrings.add(currentSubString)
37             }
38             nextFindStartPoint = nextFindStartPoint === -1 ? undefined : nextFindStartPoint
39         } else {
40             if (nextString[nextFindStartPoint + 1] === character) {
41                 nextFindStartPoint = nextFindStartPoint + 1
42                 currentSubString = currentSubString ? currentSubString + character : character
43             } else {
44                 nextFindStartPoint = undefined
45                 subStrings.add(currentSubString)
46                 currentSubString = character
47             }
48         }
49     }
50     return subStrings
51 }
52 
53 function findTheLongest (arrayOfStrings) {
54     return arrayOfStrings.reduce((accumulator, currentValue) => findTheLonger(accumulator, currentValue), '')
55 
56     function findTheLonger (string1, string2) {
57         return (string1.length > string2.length) ? (string1) : (string2)
58     }
59 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 屬性繼承 有時候你會發現給一個元素設置一些樣式後,它的後代也跟著發生變化,這種扯淡的行為我們叫做屬性繼承。 那麼問題來了,哪些屬性可以繼承,哪些又不可以呢? 可以繼承的屬性:1.color字體顏色(a除外,a是特殊的,要改變a裡面的顏色,必須直接給a設置,給a的父級設置不行); 2.font系列,例 ...
  • 1.作用域鏈 作用域:瀏覽器給JS的一個生存環境(棧記憶體)。 作用域鏈:JS中的關鍵字var 和function 都可以提前聲明和定義。提前聲明和定義的內容放在我們的 記憶體地址(堆記憶體)中。然後JS從上到下逐行執行,遇到變數就去記憶體地址查找是否存在這個變數。有 就使用,沒有就繼續向父級作用域查找直到 ...
  • 最近的項目需要使用小程式的藍牙功能與硬體設備進行連接相互傳送數據指令,聯調過程中發現一些問題,於是想著記錄下來,方便以後查看! 1.0一般使用藍牙功能肯定是想連接某一個藍牙設備,所以需要知道這個藍牙設備的名稱,一般來說都是掃描二維碼連接,那麼當你掃描這個設備二維碼的時候,就需要去初始化你手機上的藍牙 ...
  • Vue.js大總結 vue漸進式的理解 vue可以開發很多插件,可以把很多插件組合到一起,漸進的增加vue的功能 update beforeUpdated 在這兩個鉤子中不要修改data數據,否則會死迴圈, 因為數據修改後update會執行,執行後又會修改數據,如此便會死迴圈 data data為什 ...
  • 需求: 有一組圖片,每隔3秒鐘去切換一張,最終是不停的切換 技術要點: 切換圖片 每隔三秒做一件事 步驟分析: 1.確定事件:文檔載入完成的事件onload 2.事件要觸發:init() 3.函數裡面要做一些事情(通常會去操作元素,提供交互) 1.開啟一個定時器:執行切換圖片的函數changeImg ...
  • vue中的插槽————slot 什麼是插槽? 插槽(Slot)是Vue提出來的一個概念,正如名字一樣,插槽用於決定將所攜帶的內容,插入到指定的某個位置,從而使模板分塊,具有模塊化的特質和更大的重用性。 插槽顯不顯示、怎樣顯示是由父組件來控制的,而插槽在哪裡顯示就由子組件來進行控制 怎麼用插槽? 預設 ...
  • <script> (function(){ var code = GetQueryString('code'); if(code){ alert(code) return false; }else{ shouquan(); } function shouquan(){ var redirect_ur ...
  • 一個常見的場景,獲取:標簽背景圖片鏈接: 如字元串:var bgImg = "url(\"https://img30.360buyimg.com/sku/jfs/t26203/262/100869187/204098/1d1479e9/5b84b80bNf39db45f.jpg\")"; 腳本: 劃 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...