力扣(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);
    }
}
相关推荐
PAK向日葵4 小时前
【算法导论】PDD 0817笔试题题解
算法·面试
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen6 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
地平线开发者6 小时前
ReID/OSNet 算法模型量化转换实践
算法·自动驾驶
wyiyiyi7 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
地平线开发者7 小时前
开发者说|EmbodiedGen:为具身智能打造可交互3D世界生成引擎
算法·自动驾驶
mit6.8247 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员7 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋7 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat