力扣(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,并且当前字符 ch 与 str 的倒数第一个字符(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为当前ans和tmp中的较大值,并将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);
    }
}
相关推荐
jyOverQ5 分钟前
从零学 JVM(七):垃圾收集器详解——Serial、ParNew、Parallel、CMS 与 G1
java·jvm
liangbo713 分钟前
Spring系列11:切点表达式
java·spring
30955666631 分钟前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
nice_lcj52034 分钟前
MySQL 存储引擎入门:InnoDB 和 MyISAM 到底怎么选
java·数据库·mysql·面试·innodb·存储引擎·myisam
文丑颜不良啊1 小时前
LeetCode2861~2880题目解析
java·leetcode
2601_967980111 小时前
世界上最好的Python编辑器是什么?我投PyCharm一票
ide·python·pycharm·数据科学·jupyter notebook
装不满的克莱因瓶1 小时前
设计模式之策略模式核心概念和应用场景
java·后端·设计模式·架构·系统架构·策略模式
晴天的雨.9921 小时前
【C++】继承篇
java·开发语言·c++
SomeOtherTime1 小时前
第 1 讲:内存布局与所有权解剖——栈帧、胖指针与“移动/拷贝”在汇编层面的真实面目
java·开发语言·汇编
wuyk5551 小时前
Spider-第09讲-三格式落盘CSV-Excel-JSON
爬虫·python·json·excel