Python 面试题

1. 给定一个数组和两个字符串,从数组找出两个字符串的最小间距。如:['123','abc','we','qwe','123']中,‘123’和‘abc’的最小距离是1,‘123’和‘456’(不存在)是0。

 1 class Solution:
 2     def minDistance(self, strs, str1, str2):
 3         # write code here
 4         str1_list = []
 5         str2_list = []
 6         min = 0
 7         for num, content in enumerate(strs):
 8             if str1 in content:
 9                 str1_list.append(num)
10             elif str2 in content:
11                 str2_list.append(num)
12         if len(str1_list) == 0 or len(str2_list) == 0:
13             return -1
14         else:
15             for i in str1_list:
16                 for j in str2_list:
17                     a = abs(i - j)
18                     if min == 0 or a < min:
19                         min = a
20             return min
21 
22 
23 sol = Solution()
24 strs = ["QWER", "1234", "qwe", "666", "QWER","QWER","666"]
25 str1 = "QWER"
26 str2 = "666"
27 res = sol.minDistance(strs, str1, str2)
28 print(res)

以上 case 通过率为 80%,自查出现的问题:(当时面试官说 abs() 函数求绝对值在极限情况下会有问题,目前还不知道什么问题)

  1. 字符串为两个相同的值时,返回是 -1
  2. 当前的写法,如果要查找的是 12 和 666 的距离,会返回 2,期望是 -1

基于以上的问题,修改为:(修改的内容为 8-12 行)

 1 class Solution:
 2     def minDistance(self, strs, str1, str2):
 3         # write code here
 4         str1_list = []
 5         str2_list = []
 6         min = 0
 7         for num, content in enumerate(strs):
 8             if str1 == content and str1 == str2:
 9                 return 0
10             elif str1 == content:
11                 str1_list.append(num)
12             elif str2 == content:
13                 str2_list.append(num)
14         if len(str1_list) == 0 or len(str2_list) == 0:
15             return -1
16         else:
17             for i in str1_list:
18                 for j in str2_list:
19                     a = abs(i - j)
20                     if min == 0 or a < min:
21                         min = a
22             return min

2. 从一个文档中读取单词,单词每行一个,统计出现频率为前 10 的单词和出现次数。

 1 def CountWords(filename):
 2     all_words = {}
 3     with open(filename,'r',encoding='utf-8') as fr:
 4         for line in fr.readlines():
 5             word = line.strip()
 6             if word in all_words.keys():
 7                 all_words[word] += 1
 8             else:
 9                 all_words[word] = 1
10 
11     res_words = sorted(all_words.items(),key=lambda x:x[1],reverse=True)[:10]
12     # res_words = [x[0] for x in res_words]   # 只返回单词时加上这句
13     return res_words

遇到的问题:sorted 函数不会用、匿名函数不熟练

posted @ 2021-01-04 08:25  april_aaa  阅读(69)  评论(0编辑  收藏  举报