案例7
空格替换练习题
题干:
给定一个字符串str,将其中所有的空格字符替换成’%20’,假设str后面有足够的空间
class Solution():
def replace(self,strs):
if strs=='' or len(strs)==0:
return strs
if ' ' in strs:
strs = strs.replace(' ','%20')
return strs
案例8
合法括号序列判断练习题
题干:
给定一个字符串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
案例9
最长无重复字符子串练习题
题干:
给定一个字符串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