2024-12-03:统计特殊字母的数量Ⅰ。用go语言,给定一个字符串 word,统计其中具有大写和小写形式同时存在的字母的数量。
输入:word = "aaAbcBC"。
输出:3。
解释:
word 中的特殊字母是 'a'、'b' 和 'c'。
答案2024-12-03:
chatgpt[1]
题目来自leetcode3120。
1.首先定义了一个 numberOfSpecialChars
函数,该函数接收一个字符串 word
作为参数,并返回特殊字母的数量。
2.在函数中创建了一个名为 mask
的数组,数组包含两个整数元素,初始值为0。这里使用了位操作来记录字母的出现情况。
3.通过循环遍历字符串中的每个字符 c
:
c
右移 5位并与1进行与操作,以确定该字符属于哪个位置的整数(0 或 1)。c
与31进行与操作,以获取该字符在整数中的具体位置。4.在计算完整个字符串后,将两个整数进行与操作,并统计结果中为1的比特位个数,即为具有大写和小写形式同时存在的字母的数量。
5.最后在 main
函数中定义了一个测试用例 word := "aaAbcBC"
,并调用 numberOfSpecialChars
函数打印出特殊字母的数量。
总的时间复杂度为 O(n),其中 n 为字符串长度,因为需要遍历整个字符串。
总的额外空间复杂度为 O(1),因为只使用了固定大小的数组和常数个变量来存储数据。
package main
import(
"fmt"
"math/bits"
)
func numberOfSpecialChars(word string)int{
mask :=[2]int{}
for _, c :=range word {
mask[c>>5&1]|=1<<(c &31)
}
return bits.OnesCount(uint(mask[0]& mask[1]))
}
func main(){
word :="aaAbcBC"
fmt.Println(numberOfSpecialChars(word))
}
fn number_of_special_chars(word:&str)->usize{
letmut masks=[0_u32;2];// 使用u32存储掩码
forcin word.chars(){
letindex= c asusize>>5&1;// 获取高位
masks[index]|=1<<(c asusize&31);// 更新掩码
}
// 位与运算计算重叠位的数量
letoverlap_mask= masks[0]& masks[1];
// 统计重叠的位数
overlap_mask.count_ones()asusize
}
fnmain(){
letword="aaAbcBC";
println!("{}",number_of_special_chars(word));
}
[1]
chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EP