今日任務:
- ?344.反轉字符串
- ?541.?反轉字符串II
- 卡碼網:54.替換數字
- ?151.翻轉字符串里的單詞
- 卡碼網:55.右旋轉字符串
詳細布置:
1.?344. 反轉字符串
編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組?
s
?的形式給出。不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
建議:?本題是字符串基礎題目,就是考察?reverse?函數的實現,同時也明確一下?平時刷題什么時候用?庫函數,什么時候?不用庫函數?
雙指針秒了
class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""left, right = 0, len(s) - 1# 該方法已經不需要判斷奇偶數,經測試后時間空間復雜度比用 for i in range(len(s)//2)更低# 因為while每次循環需要進行條件判斷,而range函數不需要,直接生成數字,因此時間復雜度更低。推薦使用rangewhile left < right:s[left], s[right] = s[right], s[left]left += 1right -= 1
2.?541. 反轉字符串 II
給定一個字符串?
s
?和一個整數?k
,從字符串開頭算起,每計數至?2k
?個字符,就反轉這?2k
?字符中的前?k
?個字符。
- 如果剩余字符少于?
k
?個,則將剩余字符全部反轉。- 如果剩余字符小于?
2k
?但大于或等于?k
?個,則反轉前?k
?個字符,其余字符保持原樣。
建議:本題又進階了,自己先去獨立做一做,然后在看題解,對代碼技巧會有很深的體會。?
class Solution:def reverseStr(self, s: str, k: int) -> str:"""1. 使用range(start, end, step)來確定需要調換的初始位置2. 對于字符串s = 'abc',如果使用s[0:999] ===> 'abc'。字符串末尾如果超過最大長度,則會返回至字符串最后一個值,這個特性可以避免一些邊界條件的處理。3. 用切片整體替換,而不是一個個替換."""def reverse_substring(text):left, right = 0, len(text) - 1while left < right:text[left], text[right] = text[right], text[left]left += 1right -= 1return textres = list(s)for cur in range(0, len(s), 2 * k):res[cur: cur + k] = reverse_substring(res[cur: cur + k])return ''.join(res)
3.?54. 替換數字(第八期模擬筆試)?
給定一個字符串 s,它包含小寫字母和數字字符,請編寫一個函數,將字符串中的字母字符保持不變,而將每個數字字符替換為number。 例如,對于輸入字符串 "a1b2c3",函數應該將其轉換為 "anumberbnumbercnumber"。
class Solution:def change(self, s):lst = list(s) # Python里面的string也是不可改的,所以也是需要額外空間的。空間復雜度:O(n)。for i in range(len(lst)):if lst[i].isdigit():lst[i] = "number"return ''.join(lst)
4.?151. 反轉字符串中的單詞
給你一個字符串?
s
?,請你反轉字符串中?單詞?的順序。單詞?是由非空格字符組成的字符串。
s
?中使用至少一個空格將字符串中的?單詞?分隔開。返回?單詞?順序顛倒且?單詞?之間用單個空格連接的結果字符串。
注意:輸入字符串?
s
中可能會存在前導空格、尾隨空格或者單詞間的多個空格。返回的結果字符串中,單詞間應當僅用單個空格分隔,且不包含任何額外的空格。
class Solution:def reverseWords(self, s: str) -> str:# 將字符串拆分為單詞,即轉換成列表類型words = s.split()# 反轉單詞left, right = 0, len(words) - 1while left < right:words[left], words[right] = words[right], words[left]left += 1right -= 1# 將列表轉換成字符串return " ".join(words)
5.?55. 右旋字符串(第八期模擬筆試)
字符串的右旋轉操作是把字符串尾部的若干個字符轉移到字符串的前面。給定一個字符串 s 和一個正整數 k,請編寫一個函數,將字符串中的后面 k 個字符移到字符串的前面,實現字符串的右旋轉操作。?
例如,對于輸入字符串 "abcdefg" 和整數 2,函數應該將其轉換為 "fgabcde"。
#獲取輸入的數字k和字符串
k = int(input())
s = input()#通過切片反轉第一段和第二段字符串
#注意:python中字符串是不可變的,所以也需要額外空間
s = s[len(s)-k:] + s[:len(s)-k]
print(s)