news 2026/6/23 12:18:09

leetcode 2147. 分隔长廊的方案数 困难

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 2147. 分隔长廊的方案数 困难

在一个图书馆的长廊里,有一些座位和装饰植物排成一列。给你一个下标从0开始,长度为n的字符串corridor,它包含字母'S''P',其中每个'S'表示一个座位,每个'P'表示一株植物。

在下标0的左边和下标n - 1的右边已经分别各放了一个屏风。你还需要额外放置一些屏风。每一个位置i - 1i之间(1 <= i <= n - 1),至多能放一个屏风。

请你将走廊用屏风划分为若干段,且每一段内都恰好有两个座位,而每一段内植物的数目没有要求。可能有多种划分方案,如果两个方案中有任何一个屏风的位置不同,那么它们被视为不同方案。

请你返回划分走廊的方案数。由于答案可能很大,请你返回它对109 + 7取余的结果。如果没有任何方案,请返回0

示例 1:

输入:corridor = "SSPPSPS"输出:3解释:总共有 3 种不同分隔走廊的方案。 上图中黑色的竖线表示已经放置好的屏风。 上图每种方案中,每一段都恰好有两个座位。

示例 2:

输入:corridor = "PPSPSP"输出:1解释:只有 1 种分隔走廊的方案,就是不放置任何屏风。 放置任何的屏风都会导致有一段无法恰好有 2 个座位。

示例 3:

输入:corridor = "S"输出:0解释:没有任何方案,因为总是有一段无法恰好有 2 个座位。

提示:

  • n == corridor.length
  • 1 <= n <= 10^5
  • corridor[i]要么是'S',要么是'P'

分析:由于题目已经限定了,划分出来的每一段必须要有两个座位。可以遍历整个字符串,当出现过两个 'S' 之后,再统计之后出现过多少个 'P',只有在出现过两个座位后,出现的植物之间才可以放置屏风。这里连续出现的 'P' 的个数,就是这一段可以放置的屏风数量。之后一直这样统计,直到末尾,把每一段屏风数量相乘,就能得到答案。

注意如果座位的数量是奇数,则无法放置任何屏风。

int numberOfWays(char* corridor) { long long ans=1,mod=1e9+7; int cnt_s=0,cnt_p=0,cnt=0; int num[100010]={0}; for(int i=0;corridor[i];++i) { if(cnt_s==2) { if(corridor[i]=='S')num[cnt++]=cnt_p+1,cnt_p=0,cnt_s=1; else if(corridor[i]=='P')cnt_p+=1; } else if(corridor[i]=='S')cnt_s++; } if(cnt==0) { if(cnt_s==2)return 1; else return 0; } else { if(cnt_s==1)return 0; else for(int i=0;i<cnt;++i) ans=ans*num[i]%mod; } return ans; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 21:02:14

学生党必备!这款桌面课表工具太省心了

上课前翻遍手机找课表&#xff1f;担心走神错过上课时间&#xff1f;对于学生党和老师来说&#xff0c;一款顺手的课表工具能省不少事&#xff01;今天电脑天空要给大家安利的「桌面课表 Class Widget」&#xff0c;就是这样一款精准解决课程管理痛点的桌面小工具。它最戳人的点…

作者头像 李华
网站建设 2026/6/23 21:02:23

深度学习实验14代码

实验前准备 数据集 # make data import random import numpy as np import os # 固定随机种子 random.seed(0) np.random.seed(0)def generate_data(length, k, save_path):if length < 3:raise ValueError("The length of data should be greater than 2.")if k …

作者头像 李华
网站建设 2026/6/23 22:16:52

优化及性能-–-behaviac

原文 优化及性能 宏BEHAVIAC_RELEASE定义的时候是最终版&#xff0c;BEHAVIAC_RELEASE没有定义的时候是为开发版。 在debug版中&#xff0c;BEHAVIAC_RELEASE缺省下没有定义的。诸如logging、socketing、热加载等开发功能是有效的。可以通过behaviac::Config::IsLogging和be…

作者头像 李华
网站建设 2026/6/23 8:04:13

练题100天——DAY26:汇总区间+丢失的数字+数组交集

今天又又是三道题&#xff0c;难度范围&#xff1a;★★~★★★。难度完全是凭个人做的感觉标的&#xff0c;题还是得自己做了才知道。 100天也已经过1/4了&#xff0c;非常之不错啊&#xff0c;希望这些记录能让我对这些题的理解更深&#xff0c;当然&#xff0c;也希望能对你…

作者头像 李华
网站建设 2026/6/23 22:17:15

当AI芯片不再性感:博通的高增长,为何成了催命符?

出品I下海fallsea撰文I胡不知2025年12月12日16点03分&#xff0c;纳斯达克交易大厅的电子屏突然泛起红光。博通&#xff08;AVGO.US&#xff09;的股价在连续30分钟的抛售潮中直线下坠&#xff0c;从开盘402美元跌至357美元&#xff0c;单日跌幅最终定格在11.2%&#xff0c;市值…

作者头像 李华
网站建设 2026/6/23 14:02:46

Vibe Coding:AI驱动的编程新范式

Vibe Coding&#xff1a;AI驱动的编程新范式与MaynorAPIPro的完美结合 在2025年&#xff0c;人工智能技术迅猛发展&#xff0c;编程领域也迎来了一场革命。其中&#xff0c;“Vibe Coding”作为一种新兴的AI辅助软件开发技巧&#xff0c;正迅速流行开来。这种方法由AI专家Andr…

作者头像 李华