简单算法面试题(附自己的答案)

这是我最近看到的面试题,想自己写一下试试,真学渣。我只是把简单功能实现了,希望大家教教我怎么可以把命名以及结构规范化起来。

1. 给定两个字符串a和b(长度超过100w),在字符类型上b是a的子集,求b在a字符类型上的补集;(本题我认为应该可以忽略对于输入的判断)

a='abcdefgcdeh'
b='cde'
c=[]
#以上定义ab的值,定义c序列是为了保存匹配正确的初始位置值,主要是防止a中有多个b的子序列
for i in range(len(a)-len(b)+1):#定义匹配的起始位置
    index=i
    print("***"+str(i))
    for j in range(len(b)):
        
        if b[j]!=a[index]:
            break
        else:
            index=index+1
    if j==len(b)-1:
        c.append(i) #将匹配成功的位置加入c中
d=[]
for k in c:
    d+=[k+m for m in range(len(b))] #d序列是匹配成功的子集位置
print(d)
for i in range(len(a)):
    if i not in d:    #匹配不在序列d内的字符串
        print(a[i])

2.给定正整数N, 返回小于等于N且至少有一位重复数字的正整数的个数;

N=int(input('N:'))
num=0
if N<11:
    print(num)
else:
    for i in range(N+1):
        a={}
        i=str(i)
        for j in range(len(i)):
            if i[j] in a:
                num+=1
                break
            else:
                a.update({i[j]:0})
    print(num)

3.电话号码组合。下图是一个手机按键的样例,每一个数字包含一些字母。比如字母“A”可以通过按一次“2”得到,字母“B”可以通过按两次“2”得到,以此类推。当给定一个数字字符串,我们也可以得到相应的映射,比如“22”, 代表字母组成的可能性是[“AA”, “B”]。要求:输入为一个数字字符串,例如”2321241499844211”。输出为可能代表的所有字母组合。

import numpy as np

ALPHABETS = 'abcdefghijklmnopqrstuvwxyz'
KEY_N = np.array([1,1,3,3,3,3,3,4,3,4])

def get_ch(ch, count):
    if ch < 2:
        return ''
    offset = -3
    for i in range(ch):
        offset += KEY_N[i]
    offset += count
    return ALPHABETS[offset]

def search(pre_res, inputs):
    len_inputs = len(inputs)
    # print('len_inputs:', len_inputs)
    if len_inputs == 0:
        print(pre_res)
        return

    ch = int(inputs[0])
    # print('ch:', ch)
    # print('KEY_N[ch]:', KEY_N[ch])
    for i in range(KEY_N[ch]):
        if i < len_inputs and int(inputs[i]) == ch:
            # print('1111111')
            # print(inputs[i+1:])
            # print(pre_res + get_ch(ch, i+1))
            search(pre_res + get_ch(ch, i+1), inputs[i+1:])
        else:
            # print('2222222')
            break

if __name__ == "__main__":
    test_case = '12156662227777'
    search('', test_case)

猜你喜欢

转载自www.cnblogs.com/superSaiyan/p/12168969.html
今日推荐