力扣(1957,128) - day01
1957. 删除字符使字符串变好

解题思路
 要将给定字符串转换为 “好字符串”(即没有三个连续相同字符),我们可以通过遍历原字符串,并构建一个新的字符串来实现。在构建新字符串的过程中,每次添加字符时,检查新字符串的最后两个字符是否与当前要添加的字符相同。如果相同,则跳过当前字符(即不添加,实现删除效果);否则,将当前字符添加到新字符串中。
- 
创建一个StringBuilder对象用于动态创建字符串,实现字符串的拼接。
StringBuilder str = new StringBuilder();
StringBuilder比普通的String更适合进行字符串的拼接操作,因为它在修改字符串时不会创建新的对象,效率更高. - 
将字符串转换为字符数组
char[] charArray = s.toCharArray(); 将输入字符串
s转换为字符数组charArray,以便后续遍历每个字符。 - 
检查是否有三个连续相同字符
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中. - 
返回结果字符串
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. 最长连续序列

解题思路
- 
输入检查:首先检查输入数组的长度。如果数组为空,直接返回 0。
 - 
排序:对数组进行排序。排序后,连续的数字会相邻排列。
Arrays.sort(nums); - 
初始化变量
ans:用于记录当前找到的最长连续序列的长度,初始值为 0。tmp:用于记录当前正在计算的连续序列的长度,初始值为 1(因为至少有一个元素本身就是一个长度为 1 的序列)。
 - 
遍历数组
- 如果当前元素与前一个元素相等,说明这两个元素是重复的,不影响连续序列的长度,跳过本次循环。
 - 如果当前元素比前一个元素大 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; }} - 
返回结果
 
完整代码:
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); }}


