一、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_字符串的好分割数目(左加右减)相关推荐

  1. c字符串分割成数组_leetcode第31双周赛第三题leetcode1525. 字符串的好分割数目

    leetcode1525. 字符串的好分割数目 给你一个字符串 s ,一个分割被称为 「好分割」 当它满足:将 s 分割成 2 个字符串 p 和 q ,它们连接起来等于 s 且 p 和 q 中不同字符 ...

  2. [Leetcode][第5458题][JAVA][字符串的好分割数目][双指针][HashSet]

    [问题描述]5458. 字符串的好分割数目[中等] [解答思路] 1. 双指针 前面的搜索前面的个数和,后面的搜索后面的个数和 时间复杂度:O(N^2) 空间复杂度:O(1) class Soluti ...

  3. 1.4 Codesys在字符串1查找字符串2的位置(从左向右、从右向左)功能

    1.在长字符串String1中的指定位置开始,从左向右查找短字符串String2最先出现的位置.具体功能代码如下: FUNCTION FINDP : INT VAR_INPUTInString1 : ...

  4. uva 10881蚂蚁(思维题)---理清关系

    题目大意:一根长度为L厘米的木棍上有n只蚂蚁每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米秒.当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置 ...

  5. 字符串——BZOJ 3097: Hash Killer I【构造题,思维题】

    BZOJ 3097: Hash Killer I[构造题,思维题] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3097 题意:让你出一组 ...

  6. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  7. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  8. 【初级】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 ...

  9. 【HDU - 2203】 亲和串 (思维题,可选KMP)

    题干: Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了, ...

最新文章

  1. 【Android 逆向】ELF 文件格式 ( ELF 文件当前版本号 | 操作系统 ABI 信息 | ABI 版本 | 文件头校验 | 文件头长度信息 )
  2. 中继器 集线器 网桥 交换机 路由器 网关之间的区别
  3. Spark微博人口流动分析(1)
  4. 新闻系统(3)内容保护的探索
  5. Pixhawk之姿态控制篇
  6. Exception in thread “Quartz Scheduler [HmpScheduler]“ org.springframework.scheduling.SchedulingExcep
  7. c语言素数程序出现大空行,C语言实现寻找大素数
  8. html5怎么自动生成meta标签,html中meta标签该如何使用
  9. 【今日CV 计算机视觉论文速览】Tue, 26 Feb 2019
  10. 用python画分形树的详细解析_基于Python的matplotlib库绘制分形树
  11. 感觉小轿车要比SUV舒服,为什么很多人还是选择了SUV?
  12. 像玩乐高一样玩 simpletun
  13. fir.im Weekly - 聊聊 Google 开发者大会
  14. 如何在excel中使用REFPROP属性库
  15. 程序员的自我进化:技术的广度与深度怎么权衡
  16. 如何购买阿里云服务器和域名,Xshell连接服务器,域名备案。
  17. revit服务器维护,Revit server是什么?Revit Server 管理有问题,谁来解决、怎么解决?...
  18. 转:Excel Web Access Web Part
  19. 照片怎么改到100k?图片压缩到固定大小?
  20. 连续复利 continuous compounding

热门文章

  1. yuv视频数据存储成jpg图片并裁剪小图
  2. 西门子S7200SMART通过编程软件清除密码方法
  3. 录制你的动态美——Java的视频滤镜
  4. php安装sg11组件,宝塔PHP7.x安装sg11组件报错版本低的升级教程
  5. JSP中使用<c:forEach>标签循环遍历元素
  6. Python脚本实现iOS自动化构建版本
  7. matlab 函数调试实验,C语言实验matlab中filter和filtfilt函数
  8. 企业是否具备等保测评资质在哪里查?怎么查?
  9. 电磁流量计的工作原理及特点
  10. 电磁流量计的使用特点