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. 最长连续序列

解题思路
-
输入检查:首先检查输入数组的长度。如果数组为空,直接返回 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);
}
}