面试编程题解题思路(一)

0x01 关于匹配字符串的最大长度问题

 这类问题主要考虑采用动态滑框的方式

1. 寻找字符串中无重复字符的最长子串长度

    字符串 s1 = ‘abcc’ 最长的子串为 ‘abc’   此时在后面加上字符 ‘d’, 变成字符串 s2 = ‘abccd’

    要寻找s2的最大长度就要比较原本的 s1的最长串‘abc’, 以及加入新字母后的字符串长度‘ cd’ 挑选长的代替 可见还是原本的s1为最长串

    所以寻找最长串的动态滑框可以理解为 在原有字符串上依次添加字母,然后与原有的串进行比对。代码如下

def find_max(s):

    if s = '':
       return 0
    if len(s) == 1:
       return 1

    length = 0
    
    for i in range(0, len(s)):
        length = max(length, find_left(s, i)
    
    return length

首先排除特殊情况空串和只有一个字符的情况,随后对字符串s进行依次遍历,寻找最大串长度。

2. 寻找串中不重复字符的串长度

在寻找最大长度时采用从右向左的方式扫描字符串,代码如下

def find_left(s, i):
    tmp = s[i]
    j = i-1

    while j >= 0 and s[j] not in s:
        tmp = tmp + s[j]
        j = j - 1
    
    return len(tmp)

0x02 二分查找

看到复杂度要求为O(nlong(m)) </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值