文章目录
- 1. 题目
- 2. 解题
322 / 1676, 19.2%
1166 / 8426,13.8%
https://leetcode-cn.com/contest/biweekly-contest-45/ranking/
前两题:
LeetCode 1748. 唯一元素的和
LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)
第四题:LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)
1. 题目
给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
- 选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
- 选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
- 前缀和后缀在字符串中任意位置都不能有交集。
- 前缀和后缀包含的所有字符都要相同。
- 同时删除前缀和后缀。
请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
示例 1:
输入:s = "ca"
输出:2
解释:你没法删除任何一个字符,
所以字符串长度仍然保持不变。示例 2:
输入:s = "cabaabac"
输出:0
解释:最优操作序列为:
- 选择前缀 "c" 和后缀 "c" 并删除它们,得到 s = "abaaba" 。
- 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "baab" 。
- 选择前缀 "b" 和后缀 "b" 并删除它们,得到 s = "aa" 。
- 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "" 。示例 3:
输入:s = "aabccabba"
输出:3
解释:最优操作序列为:
- 选择前缀 "aa" 和后缀 "a" 并删除它们,得到 s = "bccabb" 。
- 选择前缀 "b" 和后缀 "bb" 并删除它们,得到 s = "cca" 。提示:
1 <= s.length <= 10^5
s 只包含字符 'a','b' 和 'c' 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-length-of-string-after-deleting-similar-ends
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 双指针模拟
class Solution {
public:int minimumLength(string s) {int i = 0, j = s.size()-1;char l, r;while(i < j && s[i] == s[j]){l = s[i], r = s[j];while(i < j && s[i] == l)i++;while(i-1 < j && s[j] == r)j--;}return j-i+1;}
};
24 ms 12.4 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!