20190802大疆笔试 查找最长公共子串和阿拉伯数字转为中文
大疆测试08/02编程题


def getNumofCommonSubstr(str1, str2):
# 先确保str1是较短的字符串
if len(str2)<len(str1):
str1,str2 = str2,str1
lstr1 = len(str1)
lstr2 = len(str2)
record = [[0 for i in range(lstr2)] for j in range(lstr1)]
maxNum = 0 # 最长匹配长度
p = 0 # 匹配的起始位
for i in range(lstr1):
for j in range(lstr2):
if str1[i] == str2[j]:
if i>0 and j>0:
# 相同则累加
record[i][j] = record[i-1][j-1] + 1
else:
record[i][j] = 1
if record[i][j] > maxNum:
# 获取最大匹配长度
maxNum = record[i][j]
# 记录最大匹配长度的终止位置
p = i + 1
return str1[p-maxNum:p]
if __name__ == '__main__':
str1 = input()
str2 = input()
res = getNumofCommonSubstr(str1, str2)
print(res)
阿拉伯数字转为中文
例如
18---》十八
320---》三百二十
54082402 ---》五千四百零八万二千四百零二
注意: 字符串中,可以不带u,u声明了编码方式,我们默认用的是python3,不存在这个问题。
def num_2_chinese(num):
mapping = (u'零',u'一',u'二',u'三',u'四',u'五',u'六',u'七',u'八',u'九',u'十',u'十一',u'十二',u'十三',u'十四',u'十五',u'十六',u'十七',u'十八',u'十九')
p0 = (u'',u'十',u'百',u'千',u'万',u'十',u'百',u'千')
maxNum = 10**8
assert(0<=num and num<maxNum)
if num<20:
return mapping[num]
else:
lst = []
"""
while num>=10:
lst.append(num%10)
num = int(num/10)
lst.append(num)
"""
#可以改为:
while num>0:
lst.append(num%10)
num = int(num/10)
c = len(lst) #获得位数
result = u''
for idx, val in enumerate(lst):
val = int(val)
if val != 0:
result += p0[idx] + mapping[val]
if idx < c -1 and lst[idx+1]== 0:
result += u'零'
return result[::-1]
if __name__ == '__main__':
num = int(input())
print(num_2_chinese(num))

浙公网安备 33010602011771号