码迷,mamicode.com
首页 > 其他好文 > 详细

1002. 查找常用字符

时间:2020-04-29 11:07:57      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:结束   on()   range   bsp   nbsp   div   char   dad   info   

技术图片

 技术图片

 技术图片

 技术图片

 

思路:

1、按字符串长度升序排列,以排序后的首字符串中的元素为目标;
2、遍历首字符串,每一趟遍历前要统计当前字符ch分别在首字符串和返回值ans中的个数:
  numi和numans;

3、若ch未在ans里出现过(即numans<1),且在剩余字符串中都出现过,则将ch追加到ans中;
遍历剩余字符串时,若ch在当前字符串中未出现则结束本趟遍历,且不往ans中追加;
4、若ch在ans里出现过(即numans>1):
若ch在剩余字符串中的频数n(其中n = A[j].count(ch))与在A[0]中的频数不同、
并且ans中已经出现过n次,那当前字符不能往ans中追加;

代码一:没理解题意,错了。

 1 class Solution(object):
 2     def commonChars(self, A):
 3         """
 4         :type A: List[str]
 5         :rtype: List[str]
 6         """
 7         ans = []
 8         # 按字符串长度升序排列
 9         A.sort(key=lambda word: len(word))
10         for i in A[0]:
11             # 是否添加进ans的标志
12             flag = True
13             for j in range(1, len(A)):
14                 if i not in A[j]:
15                     flag = False
16                     break
17             if flag:
18                 ans.append(i)
19         return ans

 

代码二:通过。

 1 class Solution(object):
 2     def commonChars2(self, A):
 3         """
 4         :type A: List[str]
 5         :rtype: List[str]
 6         """
 7         ans = []
 8         # 按字符串长度升序排列
 9         A.sort(key=lambda word: len(word))
10         for i in A[0]:
11             # 统计当前字符在ans中的频数
12             numans = ans.count(i)
13             # 统计当前字符在A[0]中的频数
14             numi = A[0].count(i)
15             # 是否添加进ans的标志
16             flag = True
17             # 当前字符已经在ans中出现过
18             if numans > 0:
19                 for j in range(1, len(A)):
20                     # 若当前字符在后面的字符串中的频数n与在A[0]中的频数不同、
21                     # 并且ans中已经出现过n次,那当前字符不能往ans中追加
22                     if A[j].count(i) != numi and A[j].count(i) <= numans:
23                         flag = False
24                         break
25             # 若当前字符在ans中没出现过
26             else:
27                 for j in range(1, len(A)):
28                     if i not in A[j]:
29                         flag = False
30                         break
31             # 若标记为真,则可以追加进ans
32             if flag:
33                 ans.append(i)
34         return ans
35 
36 
37 if __name__ == __main__:
38     solution = Solution()
39     print(solution.commonChars2(
40         ["bcaddcdd", "cbcdccdd", "ddccbdda", "dacbbdad", "dababdcb", "bccbdaad", "dbccbabd", "accdddda"]))

 

1002. 查找常用字符

标签:结束   on()   range   bsp   nbsp   div   char   dad   info   

原文地址:https://www.cnblogs.com/panweiwei/p/12800395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!