【思维题】B039_LC_字符串的好分割数目(左加右减)
一、Problem
给你一个字符串 s ,一个分割被称为 「好分割」 当它满足:将 s 分割成 2 个字符串 p 和 q ,它们连接起来等于 s 且 p 和 q 中不同字符的数目相同。
请你返回 s 中好分割的数目。
输入:s = "aacaba"
输出:2
解释:总共有 5 种分割字符串 "aacaba" 的方法,其中 2 种是好分割。
("a", "acaba") 左边字符串和右边字符串分别包含 1 个和 3 个不同的字符。
("aa", "caba") 左边字符串和右边字符串分别包含 1 个和 3 个不同的字符。
("aac", "aba") 左边字符串和右边字符串分别包含 2 个和 2 个不同的字符。这是一个好分割。
("aaca", "ba") 左边字符串和右边字符串分别包含 2 个和 2 个不同的字符。这是一个好分割。
("aacab", "a") 左边字符串和右边字符串分别包含 3 个和 1 个不同的字符。
提示:
s 只包含小写英文字母。
1 <= s.length <= 10^5
二、Solution
方法一:字符计数
思路
代码逻辑只能从一个方向上进行(从左到有),不能双向同时执行(从两边向中间逼近),所以我们只能枚举一边,然后另一边通过做差来得出
我们先统计一遍字符个数到数组 hi 中,然后从左到右再遍历一遍:
- 遇到一个字符 s[i],那么数组 lo 对 s[i] 的计数加 1
- 相应地,数组 hi 对 s[i] 的计数就减一
- 统计一下 lo、hi 中的字符个数是否相等,相等的话,s[0:l]、s(l:n] 的就是一种好的分割方案
class Solution {public:int numSplits(string s) {vector<int> lo(26, 0), hi(26, 0);for (char c : s) hi[c-'a']++;int ans = 0;for (char c : s) {lo[c-'a']++, hi[c-'a']--;int l = 0, r = 0;for (int i = 0; i < 26; i++) {if (lo[i] > 0) l++;if (hi[i] > 0) r++;}if (l == r) ans++;}return ans;}
};
复杂度分析
- 时间复杂度:O(26n)O(26n)O(26n),
- 空间复杂度:O(1)O(1)O(1)
【思维题】B039_LC_字符串的好分割数目(左加右减)相关推荐
- c字符串分割成数组_leetcode第31双周赛第三题leetcode1525. 字符串的好分割数目
leetcode1525. 字符串的好分割数目 给你一个字符串 s ,一个分割被称为 「好分割」 当它满足:将 s 分割成 2 个字符串 p 和 q ,它们连接起来等于 s 且 p 和 q 中不同字符 ...
- [Leetcode][第5458题][JAVA][字符串的好分割数目][双指针][HashSet]
[问题描述]5458. 字符串的好分割数目[中等] [解答思路] 1. 双指针 前面的搜索前面的个数和,后面的搜索后面的个数和 时间复杂度:O(N^2) 空间复杂度:O(1) class Soluti ...
- 1.4 Codesys在字符串1查找字符串2的位置(从左向右、从右向左)功能
1.在长字符串String1中的指定位置开始,从左向右查找短字符串String2最先出现的位置.具体功能代码如下: FUNCTION FINDP : INT VAR_INPUTInString1 : ...
- uva 10881蚂蚁(思维题)---理清关系
题目大意:一根长度为L厘米的木棍上有n只蚂蚁每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米秒.当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置 ...
- 字符串——BZOJ 3097: Hash Killer I【构造题,思维题】
BZOJ 3097: Hash Killer I[构造题,思维题] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3097 题意:让你出一组 ...
- little w and Soda(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- codeforces 有意思的思维题 1 ~ 15
codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...
- 【初级】String str= ac,42,123,sd Fa,c df,4,acdf,5ewRRre ;1.把字符串按,进行分割
第7题做的不好... package HomeWork;import java.util.Arrays;/*3. String str=" ac,42,123,sd Fa,c df,4,ac ...
- 【HDU - 2203】 亲和串 (思维题,可选KMP)
题干: Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了, ...
最新文章
- 【Android 逆向】ELF 文件格式 ( ELF 文件当前版本号 | 操作系统 ABI 信息 | ABI 版本 | 文件头校验 | 文件头长度信息 )
- 中继器 集线器 网桥 交换机 路由器 网关之间的区别
- Spark微博人口流动分析(1)
- 新闻系统(3)内容保护的探索
- Pixhawk之姿态控制篇
- Exception in thread “Quartz Scheduler [HmpScheduler]“ org.springframework.scheduling.SchedulingExcep
- c语言素数程序出现大空行,C语言实现寻找大素数
- html5怎么自动生成meta标签,html中meta标签该如何使用
- 【今日CV 计算机视觉论文速览】Tue, 26 Feb 2019
- 用python画分形树的详细解析_基于Python的matplotlib库绘制分形树
- 感觉小轿车要比SUV舒服,为什么很多人还是选择了SUV?
- 像玩乐高一样玩 simpletun
- fir.im Weekly - 聊聊 Google 开发者大会
- 如何在excel中使用REFPROP属性库
- 程序员的自我进化:技术的广度与深度怎么权衡
- 如何购买阿里云服务器和域名,Xshell连接服务器,域名备案。
- revit服务器维护,Revit server是什么?Revit Server 管理有问题,谁来解决、怎么解决?...
- 转:Excel Web Access Web Part
- 照片怎么改到100k?图片压缩到固定大小?
- 连续复利 continuous compounding