力扣(1957,128) - day01

1957. 删除字符使字符串变好

解题思路

​ 要将给定字符串转换为 "好字符串"(即没有三个连续相同字符),我们可以通过遍历原字符串,并构建一个新的字符串来实现。在构建新字符串的过程中,每次添加字符时,检查新字符串的最后两个字符是否与当前要添加的字符相同。如果相同,则跳过当前字符(即不添加,实现删除效果);否则,将当前字符添加到新字符串中。

创建一个StringBuilder对象用于动态创建字符串,实现字符串的拼接。
复制代码
   StringBuilder str = new StringBuilder();

StringBuilder 比普通的 String 更适合进行字符串的拼接操作,因为它在修改字符串时不会创建新的对象,效率更高.
2.

将字符串转换为字符数组
复制代码
   char[] charArray = s.toCharArray();

​ 将输入字符串 s 转换为字符数组 charArray,以便后续遍历每个字符。
3.

检查是否有三个连续相同字符
复制代码
   for (char ch : charArray) {
   	int n = str.length();
       if(n >= 2 && ch == str.charAt(n-1) && ch == str.charAt(n-2)){
   		continue;
       }
       str.append(ch);
   }

​ 获取当前 StringBuilder 对象 str 的长度,记为 n,如果当前 StringBuilder 的长度 n 大于等于 2,并且当前字符 chstr 的倒数第一个字符(str.charAt(n - 1))和倒数第二个字符(str.charAt(n - 2))都相同,说明添加当前字符会导致出现三个连续相同的字符,因此使用 continue 跳过当前字符,不将其添加到 str 中,如果不满足上述三个连续相同字符的条件,就将当前字符 ch 添加到 str 中.
4.

返回结果字符串
复制代码
   return str.toString();

StringBuilder 对象 str 转换为普通的 String 类型,并返回处理后的结果字符串。

完整代码:
复制代码
    public static void main(String[] args) {
        String s = "aaabaaaa";
        StringBuilder str = new StringBuilder();
        char[] charArray = s.toCharArray();
        for (char ch : charArray) {
            int n = str.length();
            if(n >= 2 && ch == str.charAt(n-1) && ch == str.charAt(n-2)){
                continue;
            }
            str.append(ch);
        }
        System.out.println(str);
    }

128. 最长连续序列

解题思路
  1. 输入检查:首先检查输入数组的长度。如果数组为空,直接返回 0。

  2. 排序:对数组进行排序。排序后,连续的数字会相邻排列。

    复制代码
    Arrays.sort(nums);
  3. 初始化变量

    • ans:用于记录当前找到的最长连续序列的长度,初始值为 0。
    • tmp:用于记录当前正在计算的连续序列的长度,初始值为 1(因为至少有一个元素本身就是一个长度为 1 的序列)。
  4. 遍历数组

    • 如果当前元素与前一个元素相等,说明这两个元素是重复的,不影响连续序列的长度,跳过本次循环。

    • 如果当前元素比前一个元素大 1,说明找到了连续的数字,将tmp加 1。

    • 否则,说明当前连续序列结束,更新ans为当前anstmp中的较大值,并将tmp重置为 1,开始计算新的连续序列。

      for (int i = 1; i < nums.length; i++) {
      if (nums[i] == nums[i - 1]) {
      continue;
      } else if (nums[i] == nums[i - 1] + 1) {
      tmp++;
      } else {
      ans = Math.max(ans, tmp);
      tmp = 1;
      }
      }

  5. 返回结果

完整代码:
复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length == 0) return 0;
        Arrays.sort(nums);
        int ans = 0;
        int tmp = 1;
        for(int i = 1; i < nums.length; i++){
            if(nums[i] == nums[i-1]){
                continue; 
            }else if(nums[i] == nums[i-1] + 1){
                tmp++;
            }else{
                ans = Math.max(ans, tmp);
                tmp = 1;
            }
        }
        return Math.max(ans, tmp);
    }
}
相关推荐
燃于AC之乐39 分钟前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)6 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E7 小时前
【二分法】寻找峰值
算法
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T7 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java