网易首页 > 网易号 > 正文 申请入驻

2026-10-27:统计有效前缀数目。用go语言,给定一个只包含字符 0 和 1 的字符串 s。对于字符串从头开始的每一个连续片段(即前缀),判断

0
分享至

2026-10-27:统计有效前缀数目。用go语言,给定一个只包含字符 0 和 1 的字符串 s。对于字符串从头开始的每一个连续片段(即前缀),判断这个片段中的字符经过重新排列后,能否形成相邻字符都不相同的交替序列。若可以,则把该前缀视为满足条件。要求统计字符串 s 中满足条件的前缀总数。

换句话说,对每个前缀分别查看其中 0 和 1 的数量:只要这两种字符的数量相差不超过 1,这个前缀就可以重新排成交替形式;否则不行。最后返回所有满足该条件的前缀数量。

1 <= s.length <= 100。

s 仅由 '0' 和 '1' 组成。

输入: s = "00101"。

输出: 3。

解释:

有效的前缀是:

"0":它已经是一个交替字符串。

"001":可以被重新排列成 "010",这是一个交替字符串。

"00101":可以被重新排列成 "01010",这是一个交替字符串。

因此,答案是 3。

题目来自力扣4006。

大体步骤如下:

  1. 1.初始化统计变量
    准备一个答案变量,用来记录满足条件的前缀数量,初始为 0。
    再准备两个计数位置,分别记录当前前缀中字符0的个数和字符1的个数,初始都为 0。

  2. 2.从左到右逐个字符扫描字符串
    程序按顺序读取字符串中的每一个字符。每读取一个字符,就把它归入0或1,并让对应的计数加 1。
    因为是从头开始顺序扫描,所以每读到一个字符时,当前的计数状态正好对应“从字符串开头到当前位置”的这个前缀。

  3. 3.每形成一个前缀就立即判断是否有效
    对当前前缀,计算其中0的个数与1的个数之差的绝对值。
    如果这个绝对值不超过 1,说明两种字符的数量相差最多 1 个,可以重新排列成相邻字符都不相同的交替序列,因此当前前缀有效,答案加 1。
    如果差的绝对值大于 1,说明某一种字符比另一种多出至少 2 个,无法排成交替序列,当前前缀无效,答案不变。

  4. 4.判断条件的含义
    一个只含0和1的字符串要能重排成交替序列,最终形式只能是类似010101...或101010...。
    在这种序列中,两种字符的数量最多只能相差 1。
    反过来,如果两种字符数量差不超过 1,也一定可以通过排列让它们交替出现。
    所以“当前前缀中0和1的数量差绝对值不超过 1”就是该前缀能否重排成交替序列的充要条件。

  5. 5.继续扫描直到字符串结束
    每读入一个字符,就更新计数并判断一次当前前缀。程序不会对每个前缀重新从头统计,而是利用前面已经统计好的结果继续累加,因此效率较高。

  6. 6.结合示例s = "00101"逐步看

  • • 前缀"0":0有 1 个,1有 0 个,差为 1,不超过 1,有效,答案变为 1。

  • • 前缀"00":0有 2 个,1有 0 个,差为 2,无效,答案仍为 1。

  • • 前缀"001":0有 2 个,1有 1 个,差为 1,有效,答案变为 2。

  • • 前缀"0010":0有 3 个,1有 1 个,差为 2,无效,答案仍为 2。

  • • 前缀"00101":0有 3 个,1有 2 个,差为 1,有效,答案变为 3。
    最终返回 3。

7.最终结果
所有满足条件的前缀是"0"、"001"、"00101",共 3 个。

复杂度分析:

  • •总时间复杂度:字符串长度为n时,只需要从左到右扫描一遍,每个字符进行常数次计数和比较操作,因此总时间复杂度是O(n)。

  • •总额外空间复杂度:只使用了两个计数变量、答案变量和少量常数级辅助变量,没有随字符串长度增长的额外结构,因此额外空间复杂度是O(1)。

Go完整代码如下:

package main

import (
"fmt"
)

func countValidPrefixes(s string) (ans int) {
cnt := [2]int{}
for _, ch := range s {
cnt[ch-'0']++
if abs(cnt[0]-cnt[1]) <= 1 {
ans++
}
}
return
}

func abs(x int)int {
if x < 0 {
return -x
}
return x
}

func main() {
s := "00101"
result := countValidPrefixes(s)
fmt.Println(result)
}

Python完整代码如下:

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

def count_valid_prefixes(s: str) -> int:
cnt = [0, 0]
ans = 0

for ch in s:
cnt[int(ch)] += 1
if abs(cnt[0] - cnt[1]) <= 1:
ans += 1

return ans

def main():
s = "00101"
result = count_valid_prefixes(s)
print(result)

if __name__ == "__main__":
main()

C++完整代码如下:

  


using namespace std;

int countValidPrefixes(conststring& s) {
int cnt[2] = {0, 0};
int ans = 0;

for (char ch : s) {
cnt[ch - '0']++;
if (abs(cnt[0] - cnt[1]) <= 1) {
ans++;
}
}

return ans;
}

int main() {
string s = "00101";
int result = countValidPrefixes(s);
cout << result << endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
120-110!火箭4连胜,阿门·汤普森“盖帽”成关键,创12年神迹

120-110!火箭4连胜,阿门·汤普森“盖帽”成关键,创12年神迹

汪星人哟
2026-10-27 11:30:27
倒闭8.4万家!无数中年人的“庇护所”,如今为何跌下神坛?

倒闭8.4万家!无数中年人的“庇护所”,如今为何跌下神坛?

三农雷哥
2026-10-24 14:59:15
中超“唐田悖论”:若末轮山东泰山赢冠军,那大连英博不可能赢球

中超“唐田悖论”:若末轮山东泰山赢冠军,那大连英博不可能赢球

足球大腕
2026-10-26 13:29:16
两天票房不到2000元,不及《牛来》一半,多位明星助力也没用,本月最惨电影诞生

两天票房不到2000元,不及《牛来》一半,多位明星助力也没用,本月最惨电影诞生

影视高原说
2026-10-24 13:56:34
弗洛伦斯·皮尤自曝:好莱坞曾嫌我大腿和胸部变大,让我节食

弗洛伦斯·皮尤自曝:好莱坞曾嫌我大腿和胸部变大,让我节食

浅遇时光
2026-10-26 00:36:26
英国公布的圆明园被毁前照片,美如仙境,引发世界关注

英国公布的圆明园被毁前照片,美如仙境,引发世界关注

贱议你读史
2026-05-23 15:23:34
特朗普跟普京的秘密交易藏不住了!联俄抗中这招,中国不得不防!

特朗普跟普京的秘密交易藏不住了!联俄抗中这招,中国不得不防!

玲儿爱唱歌
2026-10-26 21:21:29
特朗普出来表态了,事关台湾问题!

特朗普出来表态了,事关台湾问题!

迷彩人生
2026-10-26 10:55:40
星巴克做对了!消费入座风波仅3天,“丑陋”照片流出,全网争论

星巴克做对了!消费入座风波仅3天,“丑陋”照片流出,全网争论

琴琴有氧运动
2026-10-26 12:22:57
武契奇输了,塞尔维亚变天,俄罗斯或失去欧洲最后一个盟友

武契奇输了,塞尔维亚变天,俄罗斯或失去欧洲最后一个盟友

山河路口
2026-10-26 15:57:40
张雪:原以为和星姐生下一儿一女已够幸福,没想到如今幸福又升级

张雪:原以为和星姐生下一儿一女已够幸福,没想到如今幸福又升级

负面黑洞
2026-10-26 20:53:30
惊天逆转!泽连斯基,掀桌子了 !

惊天逆转!泽连斯基,掀桌子了 !

大嘴说天下
2026-10-26 20:32:08
西甲要查了:姆巴佩绝杀庆祝时,有球迷用旗杆打向卡马文加

西甲要查了:姆巴佩绝杀庆祝时,有球迷用旗杆打向卡马文加

温柔且自由
2026-10-27 03:53:55
新加坡已预测中美冲突:一旦爆发,美国称中国不能攻打美本土!

新加坡已预测中美冲突:一旦爆发,美国称中国不能攻打美本土!

前行之路
2026-10-25 10:59:08
英国小两口在拼多多买了个花园拱门,收到包裹懵逼了!网友:这就是为什么有些人不该获得选举权的原因...

英国小两口在拼多多买了个花园拱门,收到包裹懵逼了!网友:这就是为什么有些人不该获得选举权的原因...

悦居英国
2026-10-16 18:52:20
歌手苏醒自曝跟好几个朋友都闹掰了,原因都是对方借了钱没还;本人发文:看大家笑这么开心,我也就没那么难过了

歌手苏醒自曝跟好几个朋友都闹掰了,原因都是对方借了钱没还;本人发文:看大家笑这么开心,我也就没那么难过了

台州交通广播
2026-10-26 08:09:34
直到德国总理对华改口,全世界才反应过来:中国有句老话说的很对

直到德国总理对华改口,全世界才反应过来:中国有句老话说的很对

领悟看世界
2026-10-26 21:33:48
2026年马上过完了,整个社会流行4种反常现象,值得每个人深思

2026年马上过完了,整个社会流行4种反常现象,值得每个人深思

猫叔东山再起
2026-10-26 19:00:09
一句“老登”,让小鹏的新车发布会变成了全网争论

一句“老登”,让小鹏的新车发布会变成了全网争论

半耳聆
2026-10-25 11:21:49
画面不堪入目,地下人奶交易乱象,成年人躺进怀里吃奶的灰色黑产

画面不堪入目,地下人奶交易乱象,成年人躺进怀里吃奶的灰色黑产

易玄
2026-09-12 10:24:46
2026-10-27 11:59:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1537文章数 84关注度
往期回顾 全部

科技要闻

Anthropic最硬气招股书,先把丑话说在前头

头条要闻

举报电诈大佬的自媒体人遇害 死前被人用钳子夹掉指甲

头条要闻

举报电诈大佬的自媒体人遇害 死前被人用钳子夹掉指甲

体育要闻

世界上最无趣的前锋,拿下了金球奖

娱乐要闻

8登春晚毛宁,57岁唱涛声依旧无人问津

财经要闻

金价跌回8字头

汽车要闻

云辇-M上车 第二代海豹07让驾驶者也能爱上的家用车

态度原创

家居
亲子
健康
艺术
数码

家居要闻

2026建博会(广州) 公装联探展交流活动

亲子要闻

从258个配方到“一粉多盖”:十年监管轮回,圣元为何总是“中招”?

痘痘能根治吗?皮肤科医生说实话

艺术要闻

梵高这幅《巴黎小说》,4.46亿元!

数码要闻

背插设计加持,技嘉B850M AORUS STEALTH系列打造清爽主机

无障碍浏览 进入关怀版