??最近兩天有點(diǎn)高產(chǎn)(只是說高數(shù)量错洁,不是指高質(zhì)量......)秉宿,希望可以堅(jiān)持下去,至少把這個(gè)算法系列先寫完屯碴,給自己來點(diǎn)成就感......
- 目錄:
算法:附錄
算法(1):遞歸
算法(2):鏈表
算法(3):數(shù)組
算法(4):字符串
算法(5):二叉樹
算法(6):二叉查找樹
算法(7):隊(duì)列和堆棧(附贈(zèng)BFS和DFS)
算法(8):動(dòng)態(tài)規(guī)劃
算法(9):哈希表
算法(10):排序
算法(11):回溯法
算法(12):位操作
字符串(String)
??字符串可以簡(jiǎn)單理解為一個(gè) 存放 unicode 編碼的字符數(shù)組描睦。大家可以對(duì)字符串執(zhí)行幾乎所有數(shù)組可以執(zhí)行的操作。但是兩者之間肯定是有一些不同之處的导而,甚至在不同語(yǔ)言當(dāng)中忱叭,字符串的特性也會(huì)有所區(qū)別(如讓人迷惑的 ‘==’ 操作)。當(dāng)然今艺,本算法系列主要針對(duì)python語(yǔ)言做講解~
??不過韵丑,還是會(huì)簡(jiǎn)單說一下不同語(yǔ)言下string的區(qū)別~
比較操作:
??我們?nèi)绻褂?‘==’ 來進(jìn)行兩個(gè)字符串的比較,那么要看一看這門語(yǔ)言是否支持操作符重載(operator overloading)虚缎,如果支持撵彻,如C++,那么我們可以比較兩個(gè)字符串是否內(nèi)容一致实牡。如果不支持千康,如Java,那么當(dāng)我們使用‘==’時(shí)铲掐,相當(dāng)于是在判斷兩個(gè)string是否為同一個(gè)對(duì)象拾弃。
??python,此時(shí)聯(lián)手C++摆霉,也是可以用等號(hào)來判斷兩個(gè)string是否內(nèi)容相同~可變和不可變(也就是能不能修改):
??在C++里面豪椿,字符串是可變的,相當(dāng)于你操作字符串携栋,可以像操作數(shù)組一樣搭盾,使用索引更改元素。但是在 Java 里婉支,字符串則不可變鸯隅,如執(zhí)行s = 'good evening'; s[4] = ','
等類似修改字符串內(nèi)容的操作,是不可以的向挖。如果你想要哪怕只是更改一個(gè)字符蝌以,也需要新建一個(gè)字符串對(duì)象。
??而python何之,本次站隊(duì)Java跟畅,將字符串視為不可變對(duì)象。
??當(dāng)字符串不可變時(shí)溶推,比如執(zhí)行一個(gè)s += 'a'
操作徊件,時(shí)間復(fù)雜度為(其中n為字符串s的長(zhǎng)度)奸攻。因?yàn)檫@個(gè)時(shí)候,是建立了一個(gè)新字符串虱痕,分配給它(n+1)的空間睹耐,然后將字符串s和字符 ‘a(chǎn)' 復(fù)制過去。
??所以部翘,如果你真的想要一個(gè)可修改的字符串硝训,那么可以嘗試建立一個(gè)字符數(shù)組(char array)。如果你很頻繁的給字符串添加內(nèi)容略就,則不妨使用其他數(shù)據(jù)結(jié)構(gòu),如Java里的(StringBuilder)晃酒。
問題1:求幾個(gè)字符串的最長(zhǎng)公共前綴( longest common prefix)
例子:
輸入: ["flower","flow","flight"]
輸出: "fl"
def longestCommonPrefix( strs: list) -> str:
if not strs:
return ""
for i, letter_group in enumerate(zip(*strs)):
if len(set(letter_group)) > 1:
return strs[0][:i]
else:
return min(strs)
if __name__ == '__main__':
s = ["flower","flow","flight"]
ans = longestCommonPrefix(s)
print(ans)
問題2:翻轉(zhuǎn)字符串中的單詞(Reverse Words in a String)表牢,字符串是一個(gè)句子,由若干單詞組成贝次,每個(gè)單詞之間由空格隔開崔兴,現(xiàn)在要將字符串中單詞翻轉(zhuǎn),例子如下蛔翅。
輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc"
用python內(nèi)置函數(shù)很容易就寫出來敲茄。
def reverseString( s: str) -> str:
a = s.split()
for i, j in enumerate(a):
a[i] = a[i][::-1]
return ' '.join(a)
if __name__ == '__main__':
s = "Let's take LeetCode contest"
ans = reverseString(s)
print(ans)
問題3:
沒找到啥有趣的好題,例題先放放山析,我看到了有趣的會(huì)立刻補(bǔ)上來堰燎。
問題4:
問題5: