首页 > 其他分享 >[LeetCode] 2405. Optimal Partition of String

[LeetCode] 2405. Optimal Partition of String

时间:2023-04-04 23:46:16浏览次数:67  
标签:count map 字母 partition 2405 字符串 Optimal LeetCode

Given a string s, partition the string into one or more substrings such that the characters in each substring are unique. That is, no letter appears in a single substring more than once.

Return the minimum number of substrings in such a partition.

Note that each character should belong to exactly one substring in a partition.

Example 1:

Input: s = "abacaba"
Output: 4
Explanation:
Two possible partitions are ("a","ba","cab","a") and ("ab","a","ca","ba").
It can be shown that 4 is the minimum number of substrings needed.

Example 2:

Input: s = "ssssss"
Output: 6
Explanation:
The only valid partition is ("s","s","s","s","s","s").

Constraints:

  • 1 <= s.length <= 105
  • s consists of only English lowercase letters.

子字符串的最优划分。

给你一个字符串 s ,请你将该字符串划分成一个或多个 子字符串 ,并满足每个子字符串中的字符都是 唯一 的。也就是说,在单个子字符串中,字母的出现次数都不超过 一次 。

满足题目要求的情况下,返回 最少 需要划分多少个子字符串。

注意,划分后,原字符串中的每个字符都应该恰好属于一个子字符串。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/optimal-partition-of-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路是贪心。我们用一个数组 map 记录遍历到的所有字母,变量 count 记录当前分了几段。当第二次遇到某个字母的时候,那就说明我们需要分段了。此时把 map 清空并再次记录当前遍历到的字母。注意有可能整个 input 字符串是没有重复字母的所以 count 初始化是 1。

时间O(n)

空间O(n)

Java实现

 1 class Solution {
 2     public int partitionString(String s) {
 3         boolean[] map = new boolean[26];
 4         int count = 1;
 5         int i = 0;
 6         while (i < s.length()) {
 7             char c = s.charAt(i++);
 8             if (map[c - 'a'] == false) {
 9                 map[c - 'a'] = true;
10             } else {
11                 count++;
12                 Arrays.fill(map, false);
13                 map[c - 'a'] = true;
14             }
15         }
16         return count;
17     }
18 }

 

LeetCode 题目总结

标签:count,map,字母,partition,2405,字符串,Optimal,LeetCode
From: https://www.cnblogs.com/cnoodle/p/17288273.html

相关文章

  • LeetCode——贪心算法总结
    贪心算法的主要的解题目的思路是: 860.柠檬水找零这道题算是生活中很常见的一道题,对于每一个顾客如果我们都有足够的零钱给他找零,那么就返回true,只要有一个顾客没有足够的零钱找给他就返回false。顾客只能有3种纸币,5元,10元,20元。我们要统计5元和10元的数量,20元的不需要统计,因为20......
  • #yyds干货盘点# LeetCode程序员面试金典:最接近的三数之和
    题目:给你一个长度为n的整数数组 nums 和一个目标值 target。请你从nums中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。 示例1:输入:nums=[-1,2,1,-4],target=1输出:2解释:与target最接近的和是2(-1+2+1=2)......
  • #yyds干货盘点# LeetCode面试题:二进制求和
    1.简述:给你两个二进制字符串a和b,以二进制字符串的形式返回它们的和。 示例 1:输入:a="11",b="1"输出:"100"示例 2:输入:a="1010",b="1011"输出:"10101"2.代码实现:classSolution{publicStringaddBinary(Stringa,Stringb){......
  • 【LeetCode排序专题02】最小k个数,关于快速排序的讨论
    最小k个数输入整数数组arr,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例1:输入:arr=[3,2,1],k=2输出:[1,2]或者[2,1]示例2:输入:arr=[0,1,2,1],k=1输出:[0]限制:0<=k<=arr.length<=100000<=arr[i......
  • 代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验
    654.最大二叉树题目链接:https://leetcode.cn/problems/maximum-binary-tree/基本的模拟思路很快/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:val)*this.left=(left===undefined......
  • 滑动窗口-leetcode344-反转字符出啊
    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例1:输入:s=["h","e","l","l","o"]输出:["o","l","l","e","h"]示例......
  • 滑动窗口-leetcode-167-俩树之和
    以长度为2的整数数组[index1,index2]的形式返回这两个整数的下标index1和index2。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。你所设计的解决方案必须只使用常量级的额外空间。示例1:输入:numbers=[2,7,11,15],target=9输出:[1,2]......
  • 快慢指针-leetcode27移除元素
    给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输......
  • 快慢指针-leetcode-26
    题目描述:给定一个已经排序好的数组,删除重复的元素,使每个元素只出现一次,并返回新的数组长度。不要为另一个数组分配额外的空间,必须采用O(1)额外内存复杂度的原地算法来解决这个问题。示例1:输入:nums=[1,1,2]输出:length=2,nums=[1,2]解释:函数应该返回新的长度2,......
  • #yyds干货盘点# LeetCode程序员面试金典:三数之和
    题目:给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。  示例1:输入:nums=[-1,0,1,2,-1,-4]输......