• 2018春招-美团后台开发方向编程题 (python实现)


    第一题:字符串距离

    题目:

    给出两个相同长度的由字符 a 和 b 构成的字符串,定义它们的距离为对应位置不同的字符的数量。如串”aab”与串”aba”的距离为 2;串”ba”与串”aa”的距离为 1;串”baa”和串”baa”的距离为 0。下面给出两个字符串 S 与 T,其中 S 的长度不小于 T 的长度。我们用|S|代表 S 的长度,|T|代表 T 的长度,那么在 S 中一共有|S|-|T|+1 个与T长度相同的子串,现在你需要计算 T 串与这些|S|-|T|+1 个子串的距离的和。

    输入描述:

    第一行包含一个字符串 S。第二行包含一个字符串 TS 和 T 均由字符 a 和 b 组成,1 ≤ |T| ≤ |S| ≤105 。

    输出描述:

    输出对应的答案。

    样例:

    in:
    aab
    aba
    out:
    2
    
    in:
    aaabb
    bab
    out:
    5
    #-*- coding:utf-8 -*-
    
    '''
        思路:字符串T在S下每次移动一次,进行比较
    '''
    class Lenth:
    
        def __init__(self,S,T):
            self.s=S
            self.t=T
        '''
            len_s:字符串S长度
            len_t:字符串T长度
            num:存储最后结果
        '''
        def Fun(self):
            len_s=len(self.s)
            len_t=len(self.t)
            num=0
            for i in range(len_s-len_t+1):#字符串移动次数
                for k in range(0, len_t):#同等字符串比较
                    if self.s[i:len_t + i]==self.t:
                        break
                    if self.s[k+i] != self.t[k]:
                        num+=1
            return num
    
    S=raw_input()
    T=raw_input()
    print Lenth(S,T).Fun()

    第二题:数字字符

    题目:

    在十进制表示中,任意一个正整数都可以用字符‘0’-‘9’表示出来。但是当‘0’-‘9’这些字符每种字符的数量有限时,可能有些正整数就无法表示出来了。比如你有两个‘1’,一个‘2’ ,那么你能表示出 11,12,121 等等,但是无法表示出 10,122,200 等数。 
      
    现在你手上拥有一些字符,它们都是‘0’-‘9’的字符。你可以选出其中一些字符然后将它们组合成一个数字,那么你所无法组成的最小的正整数是多少?

    输入描述:

    第一行包含一个由字符’0’-‘9’组成的字符串,表示你可以使用的字符。1 ≤ 字符串长度 ≤ 1000

    输出描述:

    输出你所无法组成的最小正整数。

    样例:

    in:
    55
    out:
    1
    
    in:
    123456789
    out:
    10
    #-*- coding:utf-8 -*-
    
    '''
        本题思路,将0和123456789分开考虑,本题结果只可能为:10~10....、1~11....、2~22......
    '''
    
    class Min_num:
        '''
            input_list:输入的字符串
            i:记录1~9在字符串中的一起出现的次数
        '''
        def __init__(self,input_list):
            self.input_list=input_list
            self.i=0
    
        def min(self):
            '''
            j:用于记录0出现在字符串的次数,
            while循环计算0出现的次数,同时提出字符串中的0
            '''
            j=0
            while True:
                if 0 in self.input_list:
                    self.input_list.remove(0)
                    j+=1
                else:
                    break
    
            i_first=self.get_list()
            if j>=0 and self.i==0:#当输入的字符串中有0,但是1~9并不都存在
                return i_first
            elif j>=0 and self.i>j:#当存在1~9的字符串的次数多余0的次数
                return '1'+(j+1)*'0'
            elif j>=0 and self.i!=0:#当存在0的次数多余1~9的字符串的次数
                return str(i_first)*(self.i+1)
    
        '''
        get_list:用于计算1~9在输入字符串中同时出现的次数,
        返回第一次不出现在字符串中的数,同时记录1~9出现的
        次数
        '''
        def get_list(self):
            l=[1,2,3,4,5,6,7,8,9]
            for i in l:
                if i in self.input_list:
                    self.input_list.remove(i)
                else:
                    return i
            self.i+=1
            return self.get_list()#递归循环
    
    
    
    while True:
        s=raw_input()
        input_list=[]
        for i in s:
            input_list.append(int(i))
        print Min_num(input_list).min()
     
  • 相关阅读:
    2.分布式锁
    1. junit用法,before,beforeClass,test,after, afterClass的执行顺序
    GC算法
    记一次"截图"功能的前期调研过程!
    程序员转行手册!
    Yarn详细的工作流程
    Yarn的三种调度器(Scheduler)
    Hadoop序列化与Java序列化的区别
    MapReduce执行过程
    从普通登录到单点登录图例
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/8630855.html
Copyright © 2020-2023  润新知