题目链接3120. 统计特殊字母的数量 I简单算法原理解法哈希表1ms击败100.00%时间复杂度O(N)思路很简单由于题目只涉及英文大小写字母因此我们可以借助数组代替哈希表便于区分大小写字母可以用hash存小写字母的用Hash存大写字母的由于此题只需要判断该字母是否出现过并不需要统计次数因此采用 boolean 类型数组即可JAVA代码class Solution { //3120. 统计特殊字母的数量 I public int numberOfSpecialChars(String word) { boolean[] hashnew boolean[26]; boolean[] Hashnew boolean[26]; for(char c:word.toCharArray()){ if(c97) hash[c-a]true; else Hash[c-A]true; } int cnt0; for(int i0;i26;i) if(hash[i]Hash[i]) cnt; return cnt; } }题目链接3121. 统计特殊字母的数量 II中等算法原理解法哈希表9ms击败92.33%时间复杂度O(N)此题比上题多了一个条件所有对应小写字母都必须在第一个对应大写字母之前出现那么我们还是类似的思路只不过这次我们存的是下标对于小写字母存最后一次出现时的下标对于大写字母存第一次出现时的下标后续再出现直接跳过由于下标0可能会被用到因此两个数组全初始化为-1代表还未出现过最后遍历哈希表时判断是否对应字母的大小写形式都出现过小写字母最后一次出现在大写字母第一次出现之前符合条件就计数器JAVA代码class Solution { //3121. 统计特殊字母的数量 II public int numberOfSpecialChars(String word) { int[] hashnew int[26]; int[] Hashnew int[26]; Arrays.fill(hash,-1); Arrays.fill(Hash,-1); for(int i0;iword.length();i){ char cword.charAt(i); if(c97) hash[c-a]i;//更新小写字母出现的最后一次位置 else{ if(Hash[c-A]!-1) continue; else Hash[c-A]i;//更新大写字母第一次出现的位置 } } int cnt0; for(int i0;i26;i) if(hash[i]!-1Hash[i]!-1hash[i]Hash[i]) cnt; return cnt; } }题目链接3300. 替换为数位和以后的最小元素简单算法原理解法暴力枚举1ms击败100.00%时间复杂度O(n logU)Unums数组中的最大值的位数由于数据范围很小因此我们可以暴力枚举每一个元素并且取出每一位进行累加最后取这些数的最小值即可JAVA代码class Solution { //3300. 替换为数位和以后的最小元素 public int minElement(int[] nums) { int min0x3f3f3f3f; for(int x:nums){ int t0; while(x0){ tx%10; x/10; } minMath.min(min,t); } return min; } }