LeetCode 每日一题笔记 日期:2026.05.26 题目:3120. 特殊字母的数量

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.26
  • 题目:3120. 特殊字母的数量
  • 难度:简单
  • 标签:字符串、计数、数组

1. 题目理解

问题描述 :

给你一个字符串 word。如果一个字母在字符串中同时出现了小写和大写形式 ,那么这个字母就是特殊字母 。

返回字符串中特殊字母的数量。

示例:

输入:word = "aaAbcBC"

输出:3

解释:a、b、c 都同时出现了大小写。

2. 解题思路

核心观察

  • 只需要统计每个字母小写是否出现、大写是否出现。
  • 两者都出现,就是特殊字母。

算法步骤

  1. 遍历字符串,标记每个字母的大小写是否出现。
  2. 遍历26个字母,统计同时出现大小写的字母数量。

3. 代码实现

java 复制代码
package lc3120;

public class Solution {
    public int numberOfSpecialChars(String word) {
        int res = 0;
        int[][] arr = new int[26][2];
        for (int i = 0; i < word.length(); i++) {
            int a = word.charAt(i) - 'a';
            int A = word.charAt(i) - 'A';
            //小的
            if (a >= 0) {
                arr[a][0] = 1;
            }
            //大的
            else {
                arr[A][1] = 1;
            }
        }
        for (int i = 0; i < 26; i++) {
            if (arr[i][0] == 1 && arr[i][0] == arr[i][1]) {
                res++;
            }
        }
        return res;
    }
}

4. 代码优化说明

(代码未做任何修改,仅添加注释讲解)

java 复制代码
class Solution {
public int numberOfSpecialChars(String word) {
// 长度52:0-25存小写,26-51存大写
int [] sum = new int [52];
// 转为字符数组遍历更快
char [] arr = word.toCharArray();
for(char s:arr){
    // 小写字母:存在 0~25
    if(s >='a' && s<='z' ){
        sum[ s-'a']++;
    }
    // 大写字母:存在 26~51
    else if(s>='A' && s<='Z'){
        sum[26+s-'A']++;
    }
}
int count=0;
// 遍历26个字母,判断小写位和大写位是否都>0
for(int i =0;i<(sum.length)/2;i++){
    if(sum[i] >0 && sum[i+26] > 0 ){
        count++;
    }
}
return count;
}
}

5. 复杂度分析

  • 时间复杂度 :O(n)O(n)O(n)
    一次遍历字符串 + 一次遍历26个字母。
  • 空间复杂度 :O(1)O(1)O(1)
    固定长度52的计数数组,常数空间。

6. 总结

  • 核心:单个数组统计大小写出现次数。
  • 优化点:减少判断、减少二维数组,逻辑更清晰。
  • 关键:小写占前26位,大写占后26位,一一对应检查即可。
相关推荐
凤凰院凶涛QAQ1 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
w_zero_one3 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David3 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
秋天的怀念_David4 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪4 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪4 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
果壳science6 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
java_nnnn6 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
小羊没烦恼!6 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.6 小时前
202609CSP认证P3
算法