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

【问题描述】5458. 字符串的好分割数目[中等]

在这里插入图片描述

【解答思路】

1. 双指针

前面的搜索前面的个数和,后面的搜索后面的个数和
时间复杂度:O(N^2) 空间复杂度:O(1)

class Solution {/*双指针做法,前面的搜索前面的个数和,后面的搜索后面的个数和*/public int numSplits(String s) {//rem1[i]用来记录前i个字符里面不同字符的个数int[] rem1=new int[s.length()];//s1[i]第i个字符是不是在前面出现过boolean[] s1=new boolean[26];//rem2[i]用来记录第i个字符后面不同字符的个数int[] rem2=new int[s.length()];//s2[i]第i个字符是不是在后面出现过boolean[] s2=new boolean[26];//给第一个和最后一个附上初始值rem1[0]=1;rem2[s.length()-1]=0;s1[s.charAt(0)-'a']=true;for(int i=1;i<s.length();i++){//如果没出现过,if(!s1[s.charAt(i)-'a']) {//前面不同的字符数+1rem1[i]=rem1[i-1]+1;//就把他标记出现s1[s.charAt(i)-'a']=true;}else{//如果出现过,不同字符的数量不变,直接用上一个的就行,这个字符不需要更改内容rem1[i]=rem1[i-1];} //与上面正好相反//后面是不是出现过……if(!s2[s.charAt(s.length()-i)-'a']){rem2[s.length()-1-i]=rem2[s.length()-i]+1;s2[s.charAt(s.length()-i)-'a']=true;}else{rem2[s.length()-1-i]=rem2[s.length()-i];}}int ans=0;//最后统计for(int i=0;i<s.length();i++){if(rem1[i]==rem2[i]) ans++;} return ans;}
}
2. HashSet

正向扫描字符串,统计i位置处不同字符的个数
反向扫描字符串,统计s.length()-i位置处不同字符的个数
比较正反扫描结果,统计结果
字符串 a a c a b a
正向 1 1 2 2 3 1
反向 3 3 3 2 2 1

时间复杂度:O(N) 空间复杂度:O(1)

 public int numSplits(String s) {int len = s.length();Set<Character> s1 = new HashSet<>();Set<Character> s2 = new HashSet<>();int[]count1 = new int[len];int[]count2 = new int[len];for(int i=0,j=len-1;i<len;i++,j--){char c1 = s.charAt(i);char c2 = s.charAt(j);if(!s1.contains(c1)){s1.add(c1);}if(!s2.contains(c2)){s2.add(c2);}count1[i] = s1.size();count2[j] = s2.size();}int count=0;for(int i =1 ;i<len;i++){if(count1[i-1]== count2[i]){++count;}}return count;}

【总结】

1. 统计 HashSet 双指针思路
2.一开始只能想到暴力 能想到是好事 但是要多思考再动手 不然会超时

参考链接:https://leetcode-cn.com/problems/number-of-good-ways-to-split-a-string/solution/javaer-fen-by-dui-fang-zheng-zai-jiang-hua-2/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Aop——给Advice传递参数

给Advice传递参数 Advice除了可以接收JoinPoint&#xff08;非Around Advice&#xff09;或ProceedingJoinPoint&#xff08;Around Advice&#xff09;参数外&#xff0c;还可以直接接收与切入点方法执行有关的对象&#xff0c;比如切入点方法参数、切入点目标对象&#xff08…

第三十五期:AI核心难点之一:情感分析的常见类型与挑战

情感分析或情感人工智能&#xff0c;在商业应用中通常被称为意见挖掘&#xff0c;是自然语言处理(NLP)的一个非常流行的应用。文本处理是该技术最大的分支&#xff0c;但并不是唯一的分支。情绪AI有三种类型及其组合。 情感分析或情感人工智能&#xff0c;在商业应用中通常被称…

AtCoder - 4172 Modulo Summation 贪心

开始想复杂的了 仔细观察样例后发现这个数 其实就是所有的数的LCM-1吗 只有LCM-1 对所有数取模的时候才能对所有数得到MOD = a[i]-1; 那么一个X%Y得到的最大值就是Y-1 于是得到了这个代码 #include<iostream> #include<cstdio> #include<queue> #includ…

[Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

【问题描述】[简单] 【解答思路】 1. 递归 终止条件/基本情况 root null 递推关系 max(l,r)1 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(height) class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;} else {int leftHeight ma…

第三十六期:人工智能统计调查:86%的消费者更喜欢人工客服

美国消费者越来越不愿意与聊天机器人聊天&#xff0c;人们对人工智能作为关键业务组成部分的期望越来越高&#xff0c;由于部署这项新技术导致员工技能差距越来越大。 最近一些人工智能的健康和进展状况相关调查、研究、预测和其他定量评估突显出以下几点&#xff1a;美国消费者…

[Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]

【问题描述】[简单] 【解答思路】 1. 递归 自下而上 基本情况/结束条件 &#xff1a; 叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点 当 root 节点左右孩子都为空时&#xff0c;返回 1 当 root 节点左右孩子有一个为空时&#xff0c;返回不为空的孩子节点的深度 当…

PAT 1009 说反话

#include<cstdio>#include<cstring>#include<iostream>using namespace std;typedef long long ll;char a[82][82];int cnt;int main(){while(scanf("%s",a[cnt])!EOF){cnt;//***** 由于这里把cnt放到上面的判断中去了导致 最后在判断EOF的时候多判…

75 jsp基础语法汇总

JSP语法 脚本程序 脚本程序可以包含任意量量的Java语句句、变量量、⽅方法或表达式&#xff0c;只要它们在脚本语⾔言 中是有效的。 脚本程序的语法格式&#xff1a; <% 代码⽚片段 %>或者&#xff0c;您也可以编写与其等价的XML语句句&#xff0c;就像下⾯面这样&#…

CodeVS 1300 文字排版 线性DP

1300 文件排版 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 写电子邮件是有趣的&#xff0c;但不幸的是经常写不好看&#xff0c;主要是因为所有的行不一样长&#xff0c;你的上司想要发排版精美的电子邮件&#xff0c;你的任务是为他编写一个电子邮件排版程序…

[递归]一文看懂递归

1. 递归的定义 编程语言中&#xff0c;函数 Func(Type a,……) 直接或间接调用函数本身&#xff0c;则该函数称为「递归函数」。 在实现递归函数之前&#xff0c;有两件重要的事情需要弄清楚: 递推关系&#xff1a;一个问题的结果与其子问题的结果之间的关系。基本情况&…

centos6.8 安装软件

1.安装jdk1.8 https://blog.csdn.net/zhengjinyou/article/details/80890893 2.安装tomcat8.5 https://www.cnblogs.com/jimboi/p/6405136.html 3.安装nginx https://www.cnblogs.com/vurtne-lu/p/7010065.html nginx: unrecognized service问题解决 https://blog.csdn.ne…

随机

随机数发生器 线性同余 x(i1)Axi%Mx0需要指定&#xff0c;称为种子。如果M11&#xff0c;A7&#xff0c;x01&#xff0c;那么所生成的数为7,5,2,3,10,4,6,9,8,1,7,5,2… 这个序列的周期为M-1。如果M231−1&#xff0c;这个周期应该对大多数应用来说应该够了。

Serval and Parenthesis Sequence CodeForces - 1153C 贪心

题意&#xff1a;给出一个由"(",")","?"三种字符构成的序列&#xff0c;让我们把其中的问号替换成左右括号&#xff0c;使得整个序列变成一个完整地括号序列&#xff0c;也就是括号匹配正确&#xff0c;而且要求不能提前结束的括号序列&#xf…

[Leetcode][第206题][JAVA][反转一个单链表][递归][迭代]

【问题描述】[简单] 【解答思路】 1. 递归 自底向上 基本条件/终止条件&#xff1a;当前节点或者下一个节点null 递推关系&#xff1a; head.next.next head 在函数内部&#xff0c;改变节点的指向&#xff0c;也就是 head 的下一个节点指向 head 递归函数那句 时间…

3.项目的基本概念

项目的基本概念 项目及其特征

python之各种装饰器的使用

"""    装饰器&#xff0c;带参数的装饰器&#xff0c;类的装饰器    判断是否为可迭代的    from collections import Iterable    print(isinstance([1,2,3],Iterable))    """    # 1、简单的装饰器    def debu…

[剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]

【问题描述】 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含…

[CodeForces-1138B] *Circus 解方程|数学

题意&#xff1a;有两场表演&#xff0c;n个艺术家&#xff0c;根据规则找出我们要挑选的人的编号&#xff0c;输出编号。 规则1 保证每个人只能参加一场表演&#xff0c;也就是同一个艺术家不能出现在两场表演中 规则2 两场表演参演的艺术家的数量是相同的 规则3 第一场可以…