資料結構 LeetCode(力扣)經典題 字串

2021-10-03 04:53:42 字數 3219 閱讀 4298

可直接在leetcode中搜尋題目名稱

1. z字形變換

2. 字串壓縮

將乙個給定字串根據給定的行數,以從上往下、從左到右進行 z 字形排列。

比如輸入字串為 「leetcodeishiring」 行數為 3 時,排列如下:

l   c   i   r

e t o e s i i g

e d h n

之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如:「lciretoesiigedhn」。

請你實現這個將字串進行指定行數變換的函式:

string convert(string s, int numrows);

示例 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

題目理解:

演算法流程:

複雜度分析:

class

solution

:def

convert

(self, s:

str, numrows:

int)

->

str:

if numrows<2:

return s

answer=[''

for i in

range

(numrows)

] flag=

1 i=

0for e in s:

answer[i]

+=e if

(i==

0and flag==-1

)or(i==numrows-

1and flag==1)

: flag=

-flag

i+=flag

return

''.join(answer)

字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若「壓縮」後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文本母(a至z)。

示例1:

輸入:"aabcccccaaa"

輸出:"a2b1c5a3"

示例2:

輸入:"abbccd"

輸出:"abbccd"

解釋:"abbccd"壓縮後為"a1b2c2d1",比原字串長度更長。

字串長度在[0, 50000]範圍內。

思路​ 字串壓縮的方式就是將連續出現的相同字元按照字元 + 出現次數壓縮。如果壓縮後的字串長度變短,則返回壓縮後的字串,否則保留原來的字串,所以我們模擬這個過程構建字串即可。

演算法思路

我們從左往右遍歷字串:

在遍歷結束之後,我們就得到了壓縮後的字串s,並將其長度與原串長度進行比較。如果長度沒有變短,則返回原串,否則返回壓縮後的字串。

class

solution

:def

compressstring

(self, s:

str)

->

str:

ifnot s:

return

'' count=

1 s=

'' cur=s[0]

for i in s[1:

]:if i==cur:

count+=

1else

: s+=

(cur+

str(count)

) cur=i

count=

1 s+=

(s[-1]

+str

(count)

)return s if

len(s)

<

len(s)

else s

複雜度分析

class

solution

:def

compressstring

(self,s:

str)

->

str:

stack=

[s[0],

] count=

1 s=

''for i in s[1:

]:if i==stack[-1

]:count+=

1else

: k=stack.pop(

) s+=

str(k)

s+=str(count)

count=

1if stack:

k = stack.pop(

) s +=

str(k)

s +=

str(count)

return s if

len(s)

<

len(s)

else s

打家劫舍 力扣 LeetCode

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

資料結構API 力扣刷題(陣列篇)

列表 刪除元素 返回列表副本 list.copy 返回具有指定值的元素數量 list.count value 顛倒列表順序 list.reverse 返回具有指定值的第乙個元素的索引 list.index value 對列表進行排序 list.sort reverse true false,key ...

78 子集 力扣(LeetCode)

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 求乙個陣列元素的所有組合 求乙個集合的冪集 回溯法 求乙個集合的冪集 用遞迴求解 class solutio...