携程2019-10-14第二批算法笔试题目及AC解答

求编辑距离

题目

输入2个字符串,求出这两个字符串的编辑距离,比如字符串A="携程欢迎您",字符串B="欢迎你程里人",如计算A="携程欢迎您",字符串B="欢迎你程里人",则输入只需要传入一个字符串

携程欢迎您<ctrip>欢迎你程里人

样例输入

携程欢迎您<ctrip>欢迎你程里人

样例输出

6

提示

编辑距离是给定两个字符串 A和 B,计算出将A转换成B所使用的最少操作数,操作分别可以有:
插入一个字符
删除一个字符
替换一个字符

AC解答

def edit_dis(str1,str2):
    T = [[i+j for j in range(len(str2)+1)] for i in range(len(str1)+1)]
    for i in range(1,len(str1)+1):
        for j in range(1,len(str2)+1):
            if str1[i-1] == str2[j-1]:
                d=0
            else:
                d=1
            T[i][j] = min(T[i-1][j]+1,T[i][j-1]+1,T[i-1][j-1]+d)
    return T[len(str1)][len(str2)]

data = input().split('<ctrip>')
S1=data[0]
S2 =data[1]
print(edit_dis(S1,S2))

思路

当两个字符串都为空串,那么编辑距离为0;
当其中一个字符串为空串时,那么编辑距离为另一个非空字符串的长度;
当两个字符串均为非空时(长度分别为 i 和 j ),取以下三种情况最小值即可:
1、长度分别为 i-1 和 j 的字符串的编辑距离已知,那么加1即可;
2、长度分别为 i 和 j-1 的字符串的编辑距离已知,那么加1即可;
3、长度分别为 i-1 和 j-1 的字符串的编辑距离已知,此时考虑两种情况,若第i个字符和第j个字符不同,那么加1即可;如果不同,那么不需要加1。

螺旋输出

题目:

螺旋输出矩阵数字。给定一个包含m行n列的矩阵,请按照顺时针螺旋顺序返回矩阵内所有元素

输入:

第一行:矩阵行数m,列数n,用空格隔开

其后m行:每一行的n个数字,用空格隔开

输出:按顺时针螺旋顺序输出矩阵内所有元素,以英文逗号分隔。


样例输入

3 3
1 2 3 
4 5 6
7 8 9

样例输出

1,2,3,6,9,8,7,4,5

AC解答

n = list(map(int,input().split()))[0]
data=[]

for i in range(n):
    temp_d = list(map(int,input().split()))
    data.append(temp_d)
    
res =[]

def transpose(matrix):
        new_matrix = []
        for i in range(len(matrix[0])-1,-1,-1):
            matrix1 = []
            for j in range(len(matrix)):
                matrix1.append(matrix[j][i])
            new_matrix.append(matrix1)
        return new_matrix
    
while len(data)>0:
        res = res + data[0]
        data.pop(0)
        if len(data)>0:
            data = transpose(data)
print(",".join(str(i) for i in res)) 

思路

每次记录一行的数值,再利用转置进行旋转

算术平方根求解

题目

要求不能使用任何的数学库函数,输入一个数求该数的算术平方根,精确到小数点后 4位(四舍五入)。注:用数学库函数不得分

输入

输入一个数字

输出

输出该数的算术平方根,精确到小数点后 4位(四舍五入)

样例输入

2

样例输出

1.4142

提示

保留小数点后4位,后缀0不删除

AC解答

n =int(input())
res=n**(1/2)
print('%.4f' % res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值