直通BAT面试算法精讲--字符串(3)

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

猜你喜欢

转载自blog.csdn.net/yato0514/article/details/81193580