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

举报
福大大架构师每日一题 发表于 2024/12/03 09:16:36 2024/12/03
【摘要】 2024-12-03:统计特殊字母的数量Ⅰ。用go语言,给定一个字符串 word,统计其中具有大写和小写形式同时存在的字母的数量。输入:word = “aaAbcBC”。输出:3。解释:word 中的特殊字母是 ‘a’、‘b’ 和 ‘c’。答案2024-12-03:chatgpt题目来自leetcode3120。 大体步骤如下:1.首先定义了一个 numberOfSpecialChars 函...

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

输入:word = “aaAbcBC”。

输出:3。

解释:

word 中的特殊字母是 ‘a’、‘b’ 和 ‘c’。

答案2024-12-03:

chatgpt

题目来自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 {
    let mut masks = [0_u32; 2]; // 使用u32存储掩码
    for c in word.chars() {
        let index = c as usize >> 5 & 1; // 获取高位
        masks[index] |= 1 << (c as usize & 31); // 更新掩码
    }

    // 位与运算计算重叠位的数量
    let overlap_mask = masks[0] & masks[1];

    // 统计重叠的位数
    overlap_mask.count_ones() as usize
}

fn main() {
    let word = "aaAbcBC";
    println!("{}", number_of_special_chars(word));
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。