↓快轉到主要內容
  1. LeetCode/

LeetCode 1071: Greatest Common Divisor of Strings

·1 分鐘· ·
LeetCode Daily Easy String Gcd Math
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: Easy 第一次嘗試: 2025-08-09

  • 總花費時間:00:00.00

解題思路
#

把「最大公因字串」想成一個基底子字串,重複拼接後可以同時組成 str1 與 str2。答案一定是兩字串的共同前綴,且長度需同時整除兩字串長度。從長到短嘗試候選長度並逐一驗證。

解法
#

步驟概述:

  • 設 m = len(str1)、n = len(str2)。
  • 定義 isValid(k):檢查 str1[:k] 作為基底,是否可重複形成兩字串。需滿足 m % k == 0、n % k == 0,且重複後等於原字串。
  • 自 k = m 由大到小枚舉,回傳第一個通過驗證的前綴;皆不通過則回傳空字串。

收穫
#

  • 合法答案長度必須同時整除 m 與 n。
  • 若 str1 + str2 != str2 + str1,代表沒有共同基底,可快速判斷無解。
  • 可優化:只檢查 gcd(m, n) 的因數,或直接測試 str1[:gcd(m, n)]。
  • 複雜度:最壞約 O((m + n) × d),d 為 m 與 n 的共同因數個數;空間 O(1)。

遇到的問題
#

相關文章

LeetCode 1979: Find Greatest Common Divisor of Array
·1 分鐘
LeetCode Easy Math Number-Theory Gcd Array
LeetCode 1979 解題筆記:找出最小值和最大值,用輾轉相除法算 GCD
LeetCode 504: Base 7
·1 分鐘
LeetCode Easy Math String
LeetCode 504 解題筆記:對絕對值不斷取 % 7 和 // 7,最後加上負號並反轉;0 要特別處理
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 405: Convert a Number to Hexadecimal
·1 分鐘
LeetCode Easy Math String Bit-Manipulation
LeetCode 405 解題筆記:負數先加上 2^32 變成補數,再每次取 4 個位元(% 16)轉成十六進位;0 要特別處理
LeetCode 412: Fizz Buzz
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 412 解題筆記:先判斷 15 的倍數,再判斷 5 和 3;倍數要用 %,不是 //
LeetCode 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)