问题:

查找字符串中出现最多的字符和个数?

如 sdsdsddssssssdd -> 字符最多的是s,出现9次

思路说明

利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。

然后将结果转化为字典类型。

特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。

解答1(python)

  1. import collections
  2. def most_character_number(one_string):
  3. static_result = collections.Counter(one_string)
  4. result = dict(static_result)
  5. most_number = max([value for value in result.values()])
  6. most_character = [key for key,value in result.items() if value==most_number]
  7. return (most_number,most_character)
  8. if __name__ == "__main__":
  9. (most_num,most_char) = most_character_number("yyyyyyddddddkuuuiii")
  10. print ("The most character is:%s"%most_num)
  11. print ("The number is:")
  12. for char in most_char:
  13. print char

解答2(python)

  1. str1 = "sdsdsddssssssssdd"
  2. def most_character_number(one_string):
  3. """利用字典key来统计次数"""
  4. str_dict = {}
  5. for item in one_string:
  6. if item in str_dict:
  7. str_dict[item] +=1
  8. else:
  9. str_dict[item] =1
  10. str_dict = {str_dict[key]:key for key in str_dict}
  11. return (max(str_dict),str_dict[max(str_dict)])
  12. print (most_character_number(str1))

解答2由黄老师提供,他的微博

欢迎接龙,可以按照上面格式继续。


解答3 (racket 5.2.1)

  1. #lang racket
  2. ; 需要引用 scheme 标准库中的 list (SRFI-1)
  3. (require srfi/1)
  4. ; 定义函数 get-key-by-value
  5. ; 输入一个 Hash 表和一个 a-value (用于反向查找 key value)
  6. ; 输出 value 等于 a-value 的那些 key,
  7. ; 换言之, key 满足条件 (hash-ref key) == a-value.
  8. (define (get-key-by-value a-hash a-value)
  9. (hash-for-each a-hash
  10. (lambda (k v)
  11. (if (= a-value (hash-ref a-hash k))
  12. (printf "~a: ~a~n" k v) '()))))
  13. ; 定义函数 char-cmp
  14. ; 输入一个 preset-char (预设字符)
  15. ; 返回一个的匿名函数 (其内部包含 preset-char)
  16. ; > 其输入为 char-to-be-compared (待比较的字符)
  17. ; > 当 char-to-be-compared 与 preset-char
  18. ; > 相等时输出 true, 否则输出 false
  19. (define (char-cmp preset-char)
  20. (lambda (char-to-be-compared)
  21. (if (char=? preset-char char-to-be-compared) true false)))
  22. ; 定义函数 most-character-number
  23. ; 输入一个 a-string 任意字符串
  24. ; 输出 a-string 中出现次数最多的字符, 及其出现次数
  25. (define (most-character-number a-string)
  26. (let*
  27. ([all-chars-list (string->list a-string)]
  28. [key-chars-list (delete-duplicates all-chars-list)]
  29. [result-hash (make-hash)])
  30. (for ([key-char key-chars-list])
  31. (hash-set! result-hash
  32. key-char (count (char-cmp key-char) all-chars-list)))
  33. (get-key-by-value
  34. result-hash
  35. (apply max (hash-values result-hash)))))
  36. ; 以下函数调用在正常运行之后, 应该显示
  37. ; f: 3
  38. ; d: 3
  39. ; a: 3
  40. (most-character-number "ssfdaa dffda ")

联系老齐:qiwsir#gmail.com