1002. 查找常用字符

Posted panweiwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1002. 查找常用字符相关的知识,希望对你有一定的参考价值。

技术图片

 技术图片

 技术图片

 技术图片

 

思路:

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. 查找常用字符的主要内容,如果未能解决你的问题,请参考以下文章

1002.查找常用字符

1002. 查找常用字符

leetcode 1002. 查找常用字符(Find Common Characters)

Leetcode-1002 Find Common Characters(查找常用字符)

记录C#常用的代码片段

leetcode1002. 查找共用字符