zoukankan      html  css  js  c++  java
  • 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"]))
  • 相关阅读:
    按钮-全选复选框 PENGHAO
    ASP.NET技术内幕的电子书中文版 PENGHAO
    hotmail和gmail 邮件中背景图片无效不显示的解决办法
    Silverlight之DataGrid的列格式化日期
    MS SQL基础
    JS获得当前地址栏url
    Javascript实现复制到剪贴板
    C#.NET画验证码与Cookie验证
    网站部署与定制
    操作SQL数据库常用语句
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12800395.html
Copyright © 2011-2022 走看看