iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

破題

這題的目標是將一個字串中的每個字母都向後移動一定的位數。移動的位數由一個整數陣列指定,該陣列的長度與字串的長度相同。例如,如果我們有一個字串 abc 和一個陣列 [3, 5, 9],那麼我們會將 a 向後移動 3 位得到 d,將 b 向後移動 5 位得到 g,將 c 向後移動 9 位得到 l,所以最終結果為 dgl

跟一流的人才幹大事,享受成功進步的高級樂趣!
內推機會來啦!能與優秀的程式設計師共事,是特別痛快的事,因為厲害的工程師大神會刺激你想要迎頭趕上的上進心,尤其是一起討論解決方案時,他們會觸發你有更好的解決思維能力,彼此共同成長並且一起享受解謎與破關般的樂趣。 你一定聽得懂我在說甚麼感覺,趕快把握機會,動動手指投遞履歷吧! 立即加入「面試讀書會」,和大家一起準備面試!

https://ithelp.ithome.com.tw/upload/images/20230915/20151958nT7kgUzy4M.png 內推機會 https://ithelp.ithome.com.tw/upload/images/20230902/20151958hbhGNE7BJ4.png 加入讀書會 (邀請碼:5657)

解題思路

首先初始化一個變數 sum0 和一個與 s 相同的字元陣列 ans。然後,從後向前遍歷 s 中的每個字元。對於每個字元,將 shifts 陣列中對應位置的值加到 sum 上,然後將目前字元向後移動 sum 個位數。最後,回傳 ans 陣列轉換成的字串。

程式

class Solution {
    fun shiftingLetters(s: String, shifts: IntArray): String {
        var sum = 0
        val ans = s.toCharArray()
        val maxIndex = s.length - 1
        for (index in s.indices) {
            sum = (sum + shifts[maxIndex - index] % 26) 
            ans[maxIndex - index] = ((ans[maxIndex - index].toInt() + sum - 97) % 26 + 97).toChar()
        }
        return String(ans)
    }
}

複雜度分析

  • 時間複雜度:
    On,其中 ns 的長度。這是因為我們需要遍歷 s 中的每個字元。

  • 空間複雜度:
    On,其中 ns 的長度。這是因為我們需要宣告一個新的字串來存儲結果。此外,我們還需要存儲 shifts 陣列。

pp 更多 LeetCode 解答在此,一起來學習!

內推機會來啦!

跟一流的人才幹大事,享受成功進步的高級樂趣!

https://ithelp.ithome.com.tw/upload/images/20230915/20151958nT7kgUzy4M.png 內推機會 https://ithelp.ithome.com.tw/upload/images/20230902/20151958hbhGNE7BJ4.png 加入讀書會 (邀請碼:5657)

上一篇
LeetCode 1844. Replace All Digits with Characters
下一篇
LeetCode 127. Word Ladder
系列文
破解 Android 工程師面試白板題:30 道面試題目與解答30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言