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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...