package com.ag;
public class Test {
/**
* For a given string that only contains alphabet characters a-z, if 3 or more consecutive
* characters are identical, remove them from the string. Repeat this process until
* there is no more than 3 identical characters sitting besides each other.
* Example:
* Input: aabcccbbad
* Output:
* -> aabbbad
* -> aaad
* -> d
*/
public String removeConsecutive(String s) {
StringBuilder result = new StringBuilder();
if (s.length() >= 1) {
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i);
int count = 0;
for (int j = 0; j < s.length(); j++) {
if (s.charAt(j) == currentChar) {
count++;
}
}
if (count <= 2) {
result = result.append(currentChar);
}
}
}
return result.toString();
}
/**
*#Stage 2 - advanced requirement
* Instead of removing the consecutively identical characters, replace them with a
* single character that comes before it alphabetically.
* Example:
* ccc -> b
* bbb -> a
* Input: abcccbad
* Output:
* -> abbbad, ccc is replaced by b
* -> aaad, bbb is replaced by a
* -> d
*/
public String replaceConsecutive(String s) {
while (true) {
StringBuilder newString = new StringBuilder();
int count = 1;
for (int i = 1; i < s.length(); i++) {
if (i > 0 && s.charAt(i) == s.charAt(i - 1)) {
count++;
} else {
if (count >= 3) {
// 替换为前一个字母
if ((s.charAt(i - 1) - 1) == 96) {
newString.append("");
} else {
char newChar = (char) (s.charAt(i - 1) - 1);
newString.append(newChar);
}
} else {
for (int j = 0; j < count; j++) {
newString.append(s.charAt(j));
}
}
count = 1;
}
}
// 处理最后一组字符
if (count >= 3) {
char newChar = (char) (s.charAt(s.length() - 1) - 1);
newString.append(newChar);
} else {
for (int j = 0; j < count; j++) {
newString.append(s.charAt(s.length() - 1));
}
}
String newStr = newString.toString();
if (newStr.equals(s)) { // 没有变化
break;
}
s = newStr;
}
return s;
}
public static void main(String[] args) {
Test t = new Test();
String s1 = "aabcccbbad";
String s2 = "abcccbad";
System.out.println(t.removeConsecutive(s1)); // d
System.out.println(t.replaceConsecutive(s2)); // d
}
}
超过三个连续重复的字母删除
mask哥2024-09-17 0:36
相关推荐
okjohn3 分钟前
《架构师修炼之路》——②对架构的基本认识Dave.B3 分钟前
【VTK核心过滤器详解】:vtkCleanPolyData 多边形数据清洗实战指南顾安r3 分钟前
11.10 脚本算法 五子棋 「重要」落笔映浮华丶4 分钟前
蓝桥杯零基础到获奖-第4章 C++ 变量和常量一枚前端小能手8 分钟前
「周更第11期」实用JS库推荐:Piniakirinlau11 分钟前
requst payload和query string parameters合作小小程序员小小店16 分钟前
web网页开发,在线%就业信息管理%系统,基于idea,html,layui,java,springboot,mysql。陈果然DeepVersion17 分钟前
Java大厂面试真题:从Spring Boot到AI微服务的三轮技术拷问(一)刘一说17 分钟前
在 Web 地图上可视化遥感数据:以芜湖市为例huangql52018 分钟前
Vite与Webpack完全指南:从零开始理解前端构建工具