首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2024-12-03:统计特殊字母的数量Ⅰ。用go语言,给定一个字符串 word,统计其中具有大写和小写形式同时存在的字母的数量

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进行与操作,以获取该字符在整数中的具体位置。

• 将相应的位置上的比特位置为1,表示该字符在该整数中出现过。

4.在计算完整个字符串后,将两个整数进行与操作,并统计结果中为1的比特位个数,即为具有大写和小写形式同时存在的字母的数量。

5.最后在main函数中定义了一个测试用例word := "aaAbcBC",并调用numberOfSpecialChars函数打印出特殊字母的数量。

总的时间复杂度为 O(n),其中 n 为字符串长度,因为需要遍历整个字符串。

总的额外空间复杂度为 O(1),因为只使用了固定大小的数组和常数个变量来存储数据。

Go完整代码如下:

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))

}

在这里插入图片描述Rust完整代码如下:

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));

}

在这里插入图片描述引用链接

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O-2ITl8rm19fpER8d5bgx3Lg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券