求编辑距离
题目
输入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)