搜索

阿拉尔罐体保温施工队 226-4-13: 不同字母的子字符串数量。用go说话, 给定个只包

发布日期:2026-04-15 15:07 点击次数:63

铁皮保温

226-4-13:不同字母的子字符串数量。用go说话阿拉尔罐体保温施工队,给定个只包含小写字母的字符串 s。

你需要把它切分红些许个一语气、非空的子串(隐敝通盘字符串,且不重复)。

认识是:让子串的数量尽可能多,并快乐戒指——每个子串的肇始字符皆必须各不交流,也即是说苟且两个子串的个字母不成交流。

请输出快乐上述条款时,子串的大数量。

1

s 仅由小写英翰墨母构成。

输入: s = "abcd"。

输出: 4。

解说:

不错将 "abcd" 分离为 "a"、"b"、"c" 和 "d"。

每个子字符串皆以不同的字符源头。因此,谜底是 4。

题目来独力扣376。

解题历程分步详备形色

、衔接题目中枢要求

咱们需要把给定的纯小写字母字符串,分割成一语气、不重复、非空的子串,快乐两个关键条款:

1. 悉数子串的肇始字符必须不同(不成有两个子串以同个字母源头);

2. 在快乐个条款的前提下,分割出的子串数量要尽可能多。

终输出这个大的子串数量。

补充:小写字母共只消26个(a-z),因此大可能的子串数量始终不会过26,这是中枢戒指。

二、解题中枢念念路

要让子串数量多,战略是:尽可能把每个字符单切分为个子串,只消这个字符还莫得被用作过子串的肇始字符。

因为旦某个字母行为子串源头使用过次,后续就不成再用了,是以咱们需要纪录也曾使用过的肇始字母,遍历字符串时一一判断。

三、分门径实践历程(以示例 s="abcd" 为例)

门径1:运行化纪录器用

创建个符号聚拢/符号位,门用来纪录也曾被用作子串肇始的字母,运管事态为空,莫得任何字母被使用。

同期运行化个计数器,用来统计终的子串数量,运行值为。

门径2:从新脱手遍历字符串的每个字符

咱们按划定管制字符串中的每个字符,判断现时字符是否能行为新子串的肇始字符:

1. 管制个字符 a:

• 查抄 a 是否在已使用的肇始字母聚拢中 → 未使用;

• 不错将 a 单切分为个子串;

• 子串计数器 +1(现时计数:1)。

2. 管制二个字符 b:

• 查抄 b 是否在已使用的肇始字母聚拢中 → 未使用;

• 不错将 b 单切分为个子串;

• 子串计数器 +1(现时计数:2)。

3. 管制三个字符 c:

• 查抄 c 是否在已使用的肇始字母聚拢中 → 未使用;

• 不错将 c 单切分为个子串;

• 子串计数器 +1(现时计数:3)阿拉尔罐体保温施工队。

4. 管制四个字符 d:

• 查抄 d 是否在已使用的肇始字母聚拢中 → 未使用;

• 不错将 d 单切分为个子串;

• 子串计数器 +1(现时计数:4)。

门径3:遍历收场,输出服从

通盘字符串遍历完成,计数器的值即是大子串数量,终服从为4。

四、通用场景补充诠释(非示例,匡助衔接)

若是字符串出现重复字母,举例 s="abac":

1. 个字符a:未使用,铝皮保温切分,计数=1,符号a;

2. 二个字符b:未使用,切分,计数=2,符号b;

3. 三个字符a:已符号使用过,不成行为新子串源头,必须和前个子串归拢(即ba归拢为个子串);

地址:大城县广安工业区

4. 四个字符c:未使用,切分,计数=3,符号c;

终服从为3。

复杂度分析

1. 时间复杂度

• 咱们只需要从新到尾遍历次字符串,每个字符仅管制次;

• 悉数判断、符号操作皆是常数时间 O(1)(因为字母只消26个,操作稀疏轮回);

• 总时间复杂度:O(n),n 为字符串的长度。

2. 稀疏空间复杂度

• 咱们仅使用了固定大小的空间(个整数位符号/26个布尔值符号)来纪录已使用的字母;

• 空间大小不随字符串长度 n 变化,属于常数空间;

• 总数外空间复杂度:O(1)。

回来

1. 解题中枢:遍历字符串,符号已使用的肇始字母,尽可能切分单个字符为子串;

2. 时间复杂度:O(n)(线遍历,适配1万长度的字符串);

3. 稀疏空间复杂度:O(1)(常数空间,稀疏内存诬害)。

Go完满代码如下:

package main

import (

"fmt"

"math/bits"

)

func maxDistinct(s string)int {

set :=

for _, c := range s {

set |= 1

}

return bits.OnesCount(uint(set))

}

func main {

s := "abcd"

result := maxDistinct(s)

fmt.Println(result)

}

Python完满代码如下:

# -*-coding:utf-8-*-

def max_distinct(s: str) -> int:

bitmask =

for c in s:

bitmask |= 1

return bin(bitmask).count('1')

if __name__ == "__main__":

s = "abcd"

result = max_distinct(s)

print(result)

C++完满代码如下:

#include

#include

#include

int maxDistinct(const std::string& s) {

int set = ;

for (char c : s) {

set |= 1

}

return std::popcount(static_cast(set));

}

int main {

std::string s = "abcd";

int result = maxDistinct(s);

std::cout

return;

}

咱们折服东说念主工智能为庸碌东说念主提供了种“增强器用”,并奋发于共享全位的AI学问。在这里,您不错找到新的AI科普著作、器用评测、缓助率的秘密以及行业知悉。

接待温存“福大大架构师逐日题”,发音信可获取口试贵府,让AI助力您的曩昔发展。

相关词条:罐体保温施工     异型材设备     锚索    玻璃棉    保温护角专用胶

1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》,以此来变相勒索商家索要赔偿的违法恶意行为。

查看更多