查找字符串中出现最多的字符和个数
优质
小牛编辑
132浏览
2023-12-01
查找字符串中出现最多的字符和个数?
如 sdsdsddssssssdd -> 字符最多的是s,出现9次
思路说明
利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。
然后将结果转化为字典类型。
特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。
解答1(python)
import collections
def most_character_number(one_string):
static_result = collections.Counter(one_string)
result = dict(static_result)
most_number = max([value for value in result.values()])
most_character = [key for key,value in result.items() if value==most_number]
return (most_number,most_character)
if __name__ == "__main__":
(most_num,most_char) = most_character_number("yyyyyyddddddkuuuiii")
print ("The most character is:%s"%most_num)
print ("The number is:")
for char in most_char:
print char
解答2(python)
str1 = "sdsdsddssssssssdd"
def most_character_number(one_string):
"""利用字典key来统计次数"""
str_dict = {}
for item in one_string:
if item in str_dict:
str_dict[item] +=1
else:
str_dict[item] =1
str_dict = {str_dict[key]:key for key in str_dict}
return (max(str_dict),str_dict[max(str_dict)])
print (most_character_number(str1))
解答2由黄老师提供,他的微博。
欢迎接龙,可以按照上面格式继续。
解答3 (racket 5.2.1)
#lang racket
; 需要引用 scheme 标准库中的 list 库 (SRFI-1)
(require srfi/1)
; 定义函数 get-key-by-value
; 输入一个 Hash 表和一个 a-value (用于反向查找 key 的 value)
; 输出 value 等于 a-value 的那些 key,
; 换言之, 此 key 满足条件 (hash-ref key) == a-value.
(define (get-key-by-value a-hash a-value)
(hash-for-each a-hash
(lambda (k v)
(if (= a-value (hash-ref a-hash k))
(printf "~a: ~a~n" k v) '()))))
; 定义函数 char-cmp
; 输入一个 preset-char (预设字符)
; 返回一个的匿名函数 (其内部包含 preset-char)
; > 其输入为 char-to-be-compared (待比较的字符)
; > 当 char-to-be-compared 与 preset-char
; > 相等时输出 true, 否则输出 false
(define (char-cmp preset-char)
(lambda (char-to-be-compared)
(if (char=? preset-char char-to-be-compared) true false)))
; 定义函数 most-character-number
; 输入一个 a-string 任意字符串
; 输出 a-string 中出现次数最多的字符, 及其出现次数
(define (most-character-number a-string)
(let*
([all-chars-list (string->list a-string)]
[key-chars-list (delete-duplicates all-chars-list)]
[result-hash (make-hash)])
(for ([key-char key-chars-list])
(hash-set! result-hash
key-char (count (char-cmp key-char) all-chars-list)))
(get-key-by-value
result-hash
(apply max (hash-values result-hash)))))
; 以下函数调用在正常运行之后, 应该显示
; f: 3
; d: 3
; a: 3
(most-character-number "ssfdaa dffda ")