LeetCode 1750. 删除字符串两端相同字符后的最短长度(双指针)

文章目录


在这里插入图片描述
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阿明),一起加油、一起学习进步!
Michael阿明

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页