LeetCode 1427 字串的左右移

2021-10-24 13:42:19 字數 1530 閱讀 4235

【宣告】

【難度】

簡單【題目】

給定乙個包含小寫英文本母的字串 s 以及乙個矩陣 shift,其中 shift[i] = [direction, amount]:

對這個字串進行所有操作後,返回最終結果。

【示例】

示例1:

輸入:s = "abc", shift = [[0,1],[1,2]]

輸出:"cab"

解釋:[0,1] 表示左移 1 位。 "abc" -> "bca"

[1,2] 表示右移 2 位。 "bca" -> "cab"

示例2:

輸入:s = "abcdefg", shift = [[1,1],[1,1],[0,2],[1,3]]

輸出:"efgabcd"

解釋: 

[1,1] 表示右移 1 位。 "abcdefg" -> "gabcdef"

[1,1] 表示右移 1 位。 "gabcdef" -> "fgabcde"

[0,2] 表示左移 2 位。 "fgabcde" -> "abcdefg"

[1,3] 表示右移 3 位。 "abcdefg" -> "efgabcd"

【題目鏈結】

【解題思路】

我拿到這個題目沒有多想,第一反應就是將shift矩陣進行遍歷,按照每一步要進行的操作對字串進行操作,然後返回結果即可。以示例1為例,思路為:shift[0][0] = 0,shift[0][1] = 1,表示字串向左移1位,即"abc"->"bca",這是第一步操作,第二操作為 shift[1][0] = 1,shift[1][1] = 2,表示字串向右移2位,即"bca"->"cab",這樣最後的結果就為cab。具體**為下面的**1。

我看了一下題解,發現裡面還有一種解法比較好。上面的解法有個問題,那就是需要根據shift中的每一步操作都需要對字串進行變動。我們可否講shift中的所有操作整理一下,最後直接按照整理後的操作來對字串進行操作。比如:shift中的操作包含向左移動3位,向右移動2位,那麼實際上最後相當於把最初的字串向左移動了一位即可。具體**為下面的**2。

【**】

// **1

class solution

else

}return result;

}};

//**2

class solution

else

}shiftnum %= length; //由於shiftnum為累加操作,因此需要對字元長度進行取餘

string tmp = "";

if (shiftnum > 0)

else if (shiftnum < 0)

return result;

}};

【心得】

這個題目並不算難,我拿到題目後第一時間只是想到如何一步一步把問題解決了,但並未從整體上來考慮題目。希望以後拿到題目之後可以首先從全域性來思考問題的解決思路。

字串 leetcode 43 字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...

棧 字串 leetcode394 字串解碼

題目 解題思路 遍歷字串,如果遇到的是數,則把數存入num 如果遇到的是左括號,那麼將num壓入數棧,將左括號前面的字串ans壓入字串棧,然後將num清0,將ans也清空 如果遇到的是右括號,那麼將數棧的棧頂數彈出記為 k,然後將當前的ans重複k次,連線到字串棧的棧頂字串後面,然後將字串棧的棧頂字...

LeetCode43 字串相乘

給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 題目分析 如果兩個字串中有乙個為0,則結果是0 否則的話,將其中乙...