題目描述:給你兩個字串 s 和 t ,你的目標是在 k 次操作以內把字串 s 轉變成 t 。在第 i 次操作時(1 <= i <= k),你可以選擇進行如下操作:選擇字串 s 中滿足 1 <= j <= s.length 且之前未被選過的任意下標 j (下標從 1 開始),並將此位置的字元切換 i 次。不進行任何操作。切換 1 次字元的意思是用字母表中該字母的下乙個字母替換它(字母表環狀接起來,所以 『z』 切換後會變成 『a』)。請記住任意乙個下標 j 最多只能被操作 1 次。如果在不超過 k 次操作內可以把字串 s 轉變成 t ,那麼請你返回 true ,否則請你返回 false 。
解題思路:一開始沒有注意到每個小標只能被操作一次,這樣題目會更難。如果只能操作一次,首先我們遍歷s字串,算出切換到t字串對應字元需要的切換次數(前提是t和s字串長度相等),切換次數一定在0-25
之間,因為每個字串只能操作一次,對切換次數為i
的多個字元,後面的字元的切換次數都要在前乙個字元上加26,遍歷所有的切換次數,如果完成切換的最大次數都小於k,則返回true
,反之則返回false
,**如下:
class
solution
:def
canconvertstring
(self, s:
str, t:
str, k:
int)
->
bool
: size =
len(s)
if size !=
len(t)
:return
false
from collections import defaultdict
counts = defaultdict(
int)
for i, c in
enumerate
(s):
change =
(ord
(t[i])-
ord(c))%
26if change:
counts[change]+=1
for change, c in counts.items():
if(c-1)
*26+ change > k:
return
false
return
true
力扣 K 次操作轉變字串
給你兩個字串 s 和 t 你的目標是在 k 次操作以內把字串 s 轉變成 t 在第 i 次操作時 1 i k 你可以選擇進行如下操作 切換 1 次字元的意思是用字母表中該字母的下乙個字母替換它 字母表環狀接起來,所以 z 切換後會變成 a 請記住任意乙個下標 j 最多只能被操作 1 次 如果在不超過...
Leetcode 5469 K次操作轉變字串
給你兩個字串 s 和 t 你的目標是在 k 次操作以內把字串 s 轉變成 t 在第 i 次操作時 1 i k 你可以選擇進行如下操作 選擇字串 s 中滿足 1 j s.length 且之前未被選過的任意下標 j 下標從 1 開始 並將此位置的字元切換 i 次。不進行任何操作。切換 1 次字元的意思是...
轉變字串
各位大佬,有空麻煩看一下,最好給個詳細解答,我不勝感激。現有乙個字串 存放在陣列裡,不以0結束,而是用乙個整型變數記錄陣列中資料的個數 掃瞄這個字串,遇到值是0x7e 0x7d和ascii碼中的控制字元 值小於0x20 須將該字元前插入乙個字元0x7d,同時將這個字元變成該字元和0x20按位異或後得...