题目 1870: 统计字符数

博客围绕判断由a - z组成的字符串中出现次数最多字符的问题展开。给出了题目描述、输入输出样例,解题思路是用数组记录字符出现次数并寻找最大值,同时提醒要将字符做减法确定数组下标位置,还给出了参考代码。

时间限制: 1Sec 内存限制: 128MB

题目描述:(原题链接)

判断一个由 a-z 这 26 个字符组成的字符串中哪个字符出现的次数最多


输入:

第 1 行是测试数据的组数 n,每组测试数据占 1 行,是一个由 a-z 这 26 个字符组
成的字符串,每组测试数据之间有一个空行,每行数据不超过 1000 个字符且非空

样例输入:

2
abbccc
adfadffasdf


输出:

n 行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的
次数,中间是一个空格。 如果有多个字符出现的次数相同且最多,那么输出 ascii 码最小
的那一个字符

样例输出 :

c 3
f 4


解题思路:

数组记录次数,寻找最大值

注意事项:

注意需要将字符做减法,求出需要增加次数的数组单元即下标位置

参考代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n =in.nextInt();
        in.nextLine();
        while(n--!=0) {
            int arr[] = new int[26];  //存储出现的次数
            String s=in.nextLine();
            {
                for(int i=0;i<s.length();i++) {
                    int pos = s.charAt(i)-'a';
                    arr[pos]++;     //记录次数
                }
            }
            int max=arr[0];    //寻找最大值
            for(int i=0;i<arr.length;i++) {
                if(max<arr[i]) {
                    max=arr[i];
                }
            }
            for(int i=0;i<arr.length;i++) { //输出次数最大的字符及次数
                if(max==arr[i]) {
                    System.out.println((char)('a'+i)+" "+arr[i]);
                    break;
                }
            }
        }
        in.close();
    }
}

```markdown ### 题目重述 1. 求 $1 - 2 + 3 - 4 + 5 - \cdots + 99$ 的所有数的和。 2. 输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。 --- ### 详解 **题目1解答:** 我们观察序列: $$ 1 - 2 + 3 - 4 + 5 - \cdots + 99 $$ 这是一个从1到99的整数序列,奇数位为正,偶数位为负。 可以将它拆分为: $$ (1 + 3 + 5 + \cdots + 99) - (2 + 4 + 6 + \cdots + 98) $$ - 奇数部分:首项为1,末项为99,公差为2,项数 $n = \frac{99 - 1}{2} + 1 = 50$,和为: $$ S_{\text{奇}} = \frac{50}{2} \times (1 + 99) = 2500 $$ - 偶数部分:首项为2,末项为98,公差为2,项数 $n = \frac{98 - 2}{2} + 1 = 49$,和为: $$ S_{\text{偶}} = \frac{49}{2} \times (2 + 98) = 2450 $$ 结果为: $$ 2500 - 2450 = 50 $$ 对应的 Python 代码如下: ```python # 计算 1 - 2 + 3 - 4 + ... + 99 total = 0 for i in range(1, 100): if i % 2 == 1: # 奇数加 total += i else: # 偶数减 total -= i print("结果为:", total) ``` 或者更简洁地: ```python result = sum(i if i % 2 == 1 else -i for i in range(1, 100)) print("结果为:", result) ``` 运行结果:`50` --- **题目2解答:** 输入一串字符,遍历每个字符并分类统计。 Python 代码如下: ```python # 输入字符串 s = input("请输入一行字符:") # 初始化计数器 letters = spaces = digits = others = 0 # 遍历每个字符 for char in s: if char.isalpha(): # 英文字母 letters += 1 elif char.isspace(): # 空格 spaces += 1 elif char.isdigit(): # 数字 digits += 1 else: # 其他字符 others += 1 print(f"英文字母个数:{letters}") print(f"空格个数:{spaces}") print(f"数字个数:{digits}") print(f"其他字符个数:{others}") ``` 示例输入: ``` Hello World! 123 ``` 输出: ``` 英文字母个数:10 空格个数:2 数字个数:3 其他字符个数:1 ``` --- ### 知识点 - **循环与条件判断**:使用 `for` 循环遍历元素,结合 `if-elif` 实现分支逻辑。 - **字符串内置方法**:`isalpha()`、`isdigit()`、`isspace()` 快速识别字符类型。 - **累加计数思想**:通过初始化变量并递增实现统计功能。 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值