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