題目

題目連結:https://leetcode.com/problems/scramble-string

給定一個字串 s1,將 s1 分成 xy 兩段子字串,你可以決定是否將交換兩段子字串的順序,也就是 s1 = x + y,或是 s1 = y + x。接著再對 x, y 分別進行一樣的操作,直到字串都變成長度 1 為止。

現在給你另一個字串 s2,問是否 s1 可以透過上述的操作變成 s2

範例說明

Example 1:

1
2
3
4
5
6
7
8
9
10
11
12
Input: s1 = "great", s2 = "rgeat"
Output: true

Explanation: One possible scenario applied on s1 is:
"great" --> "gr/eat" // divide at random index.
"gr/eat" --> "gr/eat" // random decision is not to swap the two substrings and keep them in order.
"gr/eat" --> "g/r / e/at" // apply the same algorithm recursively on both substrings. divide at ranom index each of them.
"g/r / e/at" --> "r/g / e/at" // random decision was to swap the first substring and to keep the second substring in the same order.
"r/g / e/at" --> "r/g / e/ a/t" // again apply the algorithm recursively, divide "at" to "a/t".
"r/g / e/ a/t" --> "r/g / e/ a/t" // random decision is to keep both substrings in the same order.
The algorithm stops now and the result string is "rgeat" which is s2.
As there is one possible scenario that led s1 to be scrambled to s2, we return true.
閱讀全文 »

零、前言

本篇文章將使用 Go-Micro 這個 Golang Microservice Framework 來建置一個最基礎的微服務。並部署一個簡單的 HTTP API Server 來作為驗證。

這裡有一個筆者當初一直被混淆的部分:

  • Go-Micro

    https://github.com/micro/go-micro

    是 Go microservices development framework,用來開發微服務,提供 Authentication, Service Discovery, Message Encoding… 微服務所需的功能。而且基本上所有的組件都是可以抽換的。非常方便。

  • Micro

    https://github.com/micro/micro

    是一個 CLI。不是必要的套件,但是可以快速的生成模板、運行服務、查看服務,micro 是基於 go-micro 開發的,但此篇文章中不會使用到。

另外,筆者之開發環境為 MacOS 10.15.7。

本篇文章的所有程式碼都放在 Github 上:https://github.com/justin0u0/go-micro-demo

下一篇文章:Go-Micro-手把手從開發到部署(下)

閱讀全文 »

Service Mesh

此篇文章為參考 Phil Calçado 所寫之 Pattern: Service Mesh,結合一些自己的想法所寫下。圖片皆來自其文章。

原始通訊時代

在人們剛開始接觸網路時,兩台機器之間的溝通可以被想像成下圖:

但漸漸的會發現,機器與機器之間的溝通可能會出現資料遺失、重試等問題,因此需要更複雜的邏輯來處理機器之間的溝通。

閱讀全文 »

為什麼要練習打字?

在科技不斷的進步下,電腦已經成為人們不可或缺的工具,而使用電腦不外乎就要使用鍵盤打字。當你還在用一指神功,眼睛盯著鍵盤慢慢的對應鍵盤位置,打字快的人可能已經打完一個段落的文章了。而英打對於工程師來說,更是一項重要無比的技能。工程師每天面對成千上萬行的程式碼,打字速度慢簡直會要了你的命。所以今天筆者要來介紹練習英打的好處,以及自己是如何透過網站 keybr.com,在短短一星期就翻倍了自己的打字速度。

閱讀全文 »

題目

題目連結:https://leetcode.com/problems/edit-distance/

給定兩個字串 word1, word2,找到最少的操作步數將 word1 轉換成 word2

有三種合法的操作:

  1. 插入一個字元
  2. 刪除一個字元
  3. 替換一個字元

範例說明

Example 1:

1
2
3
4
5
6
Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation:
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')

Example 2:

1
2
3
4
5
6
7
8
Input: word1 = "intention", word2 = "execution"
Output: 5
Explanation:
intention -> inention (remove 't')
inention -> enention (replace 'i' with 'e')
enention -> exention (replace 'n' with 'x')
exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')
閱讀全文 »
0%