將乙個給定字串根據給定的行數,以從上往下、從左到右進行 z 字形排列。
比如輸入字串為 「leetcodeishiring」 行數為 3 時,排列如下:
l c i r
e t o e s i i g
e d h n
例項1:
輸入: s = "leetcodeishiring", numrows = 3
輸出: "lciretoesiigedhn"
例項2:
輸入: s = "leetcodeishiring", numrows = 4
輸出: "ldreoeiiecihntsg"
解釋:l d r
e o e i i
e c i h n
t s g
解題思路:
1)建立numrows個列表lista[i],每個列表用來儲存相應行的字串。
2)如果只有乙個字元(numrows==1)直接return。
3)設定flag引數,初始為false,作為是否繼續按列表的正向儲存的標誌。
4)遍歷字串,沒當index為numrows-1的整數倍的時候,flag反制。之後根據flag的情況按順序儲存字元到相應的列表。
5)將列表組合起來並輸出。
t t t
t f t f t
t f t f t
f f f
可以看到,在flag為true的時候,lista[i]從0-3行正向儲存,在flag為false時,lista[i]從4-2行反向儲存,故,程式可以如下設計:
class solution:
def convert(self, s: str, numrows: int) -> str:
lista= [for i in range(numrows)]
if numrows==1:
return s
flag= false
for i,string in enumerate(s):
j = i%(numrows-1)
if j == 0:
flag = not flag
if flag:
else:
cache = [''.join(lista[i]) for i in range(numrows)]
return ''.join(cache)
參考別人寫的,自己重新理解了一遍 力扣刷題 6 Z字形變換
原題鏈結 class solution int interval numrows 2 vector strv numrows for size t i 0 i s.length i else for auto i strv cout i ends string resultstr for auto ...
力扣LeetCode刷題日記(四) Z 字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiiged...
力扣刷題1 無重複字元的最長字串
時間 19 1 3 題目 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。他人優秀 class solution def lengthoflongestsubstring self,s ty...