直通BAT面試演算法精講 字串(3)

2021-09-11 11:04:25 字數 2061 閱讀 6279

空格替換練習題

題幹: 

給定乙個字串str,將其中所有的空格字元替換成』%20』,假設str後面有足夠的空間

一般思路:

1、遍歷發現空格數量,計算替換後的總長度

2、從右往左依次拷貝字元,遇到空格換為』%20』即可。

python 可以使用   replace 函式

class solution():

def replace(self,strs):

if strs=='' or len(strs)==0:

return strs

if ' ' in strs:

strs = strs.replace(' ','%20')

return strs

合法括號序列判斷練習題題幹: 

給定乙個字串str,判斷是不是整體有效的括號字串

舉例: 

str=』()』,返回true str=』(()())』,返回true 

str=』(())』,返回true 

str=』())』,返回false,str=』()(『,返回false

解題思路: 

設定乙個num,表示』(『出現次數與」)」出現次數的差值 

遍歷的過程中遇到』(『就num++ 

遇到』)』就num– 

遍歷過程中如果num<0,則直接返回false 

如果一直沒有出現num<0,就一直遍歷下去 

遍歷完成後,如果num==0,則返回true,否則返回false

class solution():

def judge(self,s):

if '(' not in s and ')' not in s:

return true

num = 0

for i in range(len(s)):

if s[i] == '(':

num += 1

elif s[i] == ')':

num -= 1

if num<0:

return false

if num == 0:

return true

else:

return false

注意:

此題也不可以判斷對稱性,如  ')(' 不是合法組合

最長無重複字元子串練習題

題幹: 

給定乙個字串a,請返回它的最長無重複字元子串長度。保證a中字元全部為小寫英文本元,且長度小於等於500。 

要求最優解為時間複雜度為o(n),空間複雜度為o(n)

舉例: 

str=』abcd』,返回4 

str=』abcb』,最長無重複字元子串為』abc』,返回3

解題思路: 

建立乙個字典,其中start表示當前字元最後一次出現的位置 

如果字典中已經存在當前元素,就更改start的位置 

如果不存在,就新增一對新的鍵值對,其中key表示元素,value表示當前元素的下標

class solution():

def longest_no_repeat_substr(self,s):

if s is none or len(s)==0:

return 0

d = {}

start = 0

max_length = 0

for i in range(len(s)):

if s[i] in d and d[s[i]]>=start:

start = d[s[i]] + 1

else:

max_length = max(max_length,i-start+1)

d[s[i]] = i

return max_length

直通BAT面試演算法精講 字串(1)

字串面試題的特點 1.廣泛性 1 字串可以看做字元型別的陣列,與陣列排序 查詢 調整有關 2 很多其他型別的面試題可以看做字串型別的面試題 2.需要掌握的概念 1 回文 2 子串 連續 3 子串行 不連續 4 字首樹 trie樹 5 字尾樹和字尾陣列 6 匹配 7 字典序 3.需掌握的操作 1 與陣...

直通BAT面試演算法精講 排序(1)

注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...

直通BAT面試演算法精講 排序(4)

荷蘭國旗問題 三色排序問題 對只包含0,1,2的整數陣列進行排序,要求使用交換 原地排序,而不是利用計數進行排序,做到0全在陣列左邊,1在中間,2在右邊 本題主要過程和快排劃分過程類似 測試用例 arr 1,1,0,0,2,1,1,0 輸出 0,0,0,1,1,1,1,2 解題思路 在陣列左側設定乙...