首页 > 其他分享 >力扣每日一题2022.12.28---1750. 删除字符串两端相同字符后的最短长度

力扣每日一题2022.12.28---1750. 删除字符串两端相同字符后的最短长度

时间:2022-12-28 20:45:03浏览次数:40  
标签:力扣 前缀 删除 字符 后缀 28 --- 字符串 charAt

给你一个只包含字符 '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 <= 105
    s 只包含字符 'a','b' 和 'c' 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-length-of-string-after-deleting-similar-ends
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

读懂题目后的第一反应是从左右两遍向中间做,此时自然可以联想到使用双指针法。

代码如下:

 1 class Solution {
 2     public int minimumLength(String s) {
 3         //左指针
 4         int l = 0;
 5         //右指针
 6         int r = s.length() - 1;
 7         //定义循环条件,l < r 是为了应对可以全部消完的情况。
 8         while (l < r && (s.charAt(l) == s.charAt(r))) {
 9             if (s.charAt(l) == s.charAt(r)) {
10                 while (l < r && (s.charAt(l) == s.charAt(r))) {
11                     l ++;
12                 }
13                 //不满足上面的循环后,l 指针需要回退一位
14                 l --;
15                 while (l < r && (s.charAt(l) == s.charAt(r))) {
16                     r --;
17                 }
18                 l ++;
19             }
20         }
21         // r 指针在最后需要回退一位,l 指针在循环中已经做了回退。
22         r ++;
23         return r - l;
24     }
25 }

运行结果如下:

运行结果

 

标签:力扣,前缀,删除,字符,后缀,28,---,字符串,charAt
From: https://www.cnblogs.com/allWu/p/17011233.html

相关文章

  • switch 对String类型的支持(jdk-8)
    switch对int型变量的判断是直接比较整数的值。 switch对char类型的判断实际上是ASCII码,编译器会把char型的变量变成对应的int型、遍历 switch对String类型的支持是......
  • zookeeper原子消息广播协议--ZAB
    ZAB协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。在ZooKeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,ZooKeeper实现了......
  • IdentityServer4 - v4.x .Net中的实践应用
    认证授权服务的创建以下内容以密码授权方式为例。创建模拟访问DB各数据源类为模拟测试准备的数据源。///假设的用户模型publicclassTestUser{publicstring......
  •   Codeforces Round #841 (Div. 2) and Divide by Zero 2022 -----C. Even Subarray
    题目链接:https://codeforces.com/contest/1731/problem/C  题目的大致意思是:给长度为n的数组,求 子数组的异或和  的结果的除数个数为偶数个的子数组有多......
  • 04|发布-订阅模型
    发布-订阅模型API设计思路发布-订阅模式中有两个关键的动作:事件的监听(订阅)和事件的触发(发布),这两个动作自然而然地对应着两个基本的API方法。on():负责注册事件的监......
  • API对象--Deployment(chrono《kubernetes入门实战课》笔记整理)
    【概念介绍】“Deployment”,顾名思义,它是专门用来部署应用程序的,能够让应用永不宕机,多用来发布无状态的应用,是Kubernetes里最常用也是最有用的一个对象。之前学习过的两......
  • 2021软设上午题-软考知识点
    CPU的组成(运算器与控制器)程序计数器PC:存储下一条要执行指令的地址。指令寄存器IR:存储即将执行的指令。主存地址寄存器MAR:用来保存当前CPU所访问的内存单元的地址......
  • 强大的Ubuntu Touch OTA-13已开始推送
    Canonical的LukaszZemczak今天发布的通知称面向UbuntuPhone和Ubuntu平板设备的UbuntuTouchOTA-13系统更软已经成功通过rc-proposed通道向稳定版用户发送,不过整个更......
  • 闲话 22.12.28
    闲话这篇写成闲话,主要是最近想推歌了(《シャボン(肥皂泡)》by蜂屋ななしfeat.初音ミク《イカサマダンス(欺诈舞蹈)》byまふまふfeat.鏡音リン《Shamer》byChi......
  • 判断101-200之间有多少个素数,并输出所有素数
      问题分析:题目中的关键词是素数,什么是素数?素数就是只能被1和自身整除的数,例如11就是素数,但12就不是,因为12可以被1,2,3,4,6和12整除,故12就不是素数;但11就只能被1和11整除,所以......