找出字符串中重复最多的字母

本文介绍了一种使用Python找出字符串中重复次数最多的字母的方法,并对比了排序法与直接计数法的不同之处。

已知一个字符串s=“iuoifdjfjehafp”,其中有重复字母。请找出其中重复次数最多的那个字母。


两种方法:

1, 先排序,再循环一次把重复最多的字母记下来就可以了。但由于排序算法本身效率不高,因此这算是一个用时间换空间的做法。这其实和多次循环扫描的做法没有本质区别。

2, 还有一种方法是,字母一共也就26个。因此可以用26个int 变量 aNumber,bNumber...分别记录每个字母重复的次数,一遍扫描就可以完成。这算是用空间换时间的做法。

但如果把本题换成记录数组中重复最多的单词,这种方法就不适用了,因为单词的组合太多。


下面的示例演示的是第二种方法,语言是Python

def compare():
    
    stocks = ['d', 'r', 'd', 'a', 'f', 'a', 'f', 'f', 's', 's']
    maxRepeat=0
    repeat=1
    i=0
    
    stocks.sort()
    while i < len(stocks)-1:
        if stocks[i] == stocks[i+1]:
            repeat += 1
        else:
            repeat = 1
            
        if repeat > maxRepeat:
            maxRepeat = repeat
        i += 1
    print(maxRepeat)
    
    
compare()



以下为几种不同编程语言中,找出字符串`'zasdfghjklaqwertyuiopiaiasd'`里出现次数最多字母并统计其出现次数的方法: ### JavaScript 实现 ```javascript function getStr(str) { var strArr = str.split(''); var newStr = {}; var theMax = 0; var maxStr = []; // 数组去重和计算出现的次数 strArr.forEach(function(item) { if (newStr[item]) { newStr[item]++; } else { newStr[item] = 1; } }); // 比较字母出现的次数,并取出出现最多次数的字母及对应的次数 for (var key in newStr) { if (newStr[key] > theMax) { theMax = newStr[key]; maxStr = [key]; } else if (newStr[key] == theMax) { maxStr.push(key); } } // 输出方式随意 console.log('以下字母出现次数最多,出现次数为:' + theMax + '次'); for (var i = 0; i < maxStr.length; i++) { console.log(maxStr[i]); } } var testStr = 'zasdfghjklaqwertyuiopiaiasd'; getStr(testStr); ``` ### Python 实现 ```python str = 'zasdfghjklaqwertyuiopiaiasd' dict = {} # 循环遍历列表或字符串,如果不在则创建(key,value),如果字符在字典中则值加1 for i in str: if i not in dict: dict[i] = 1 else: dict[i] += 1 # 找到字典中,最大的value值 temp = max(dict.values()) # 根据最大的value值,找对应的key值,打印出出现次数最多的字符 for k, v in dict.items(): if v == temp: print("出现最多的是:", k, "出现了:", v) ``` ### C++ 实现 ```cpp #include<bits/stdc++.h> using namespace std; int ch[26]; //记数 int main() { string s = "zasdfghjklaqwertyuiopiaiasd"; int i; int index; //标记位置 for (i = 0; i < s.size(); i++) { for (int j = i; j < s.size(); j++) //j=i,为的是防止漏掉只出现一次的数 { if (s[i] == s[j]) //依次循环判断,重复出现,次数加一 { ch[s[i] - 'a']++; } } } int max = -1; //ch[i]有可能为0,所以定义max的初值为-1; for (i = 0; i < 26; i++) { if (ch[i] > max) //判断出现次数最多 { max = ch[i]; index = i; //记下出现次数最多的字符的位置 } } cout << char(index + 'a') << "," << max << endl; //输出出现最多次数的字符,和次数 return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值