1 万万没想到之聪明的编辑
1.1 题目描述
对输入字符串进行拼写错误检查,规则:
- 三个同样的字母连在一起,一定是拼写错误,去掉一个就好啦:比如helllo --> hello
- 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的第一个字母就好啦:比如helloo --> hello
- 上面的规则优先“从左到右”匹配,即如果是AABBCC,应该优先考虑修复AABB,结果为AABCC
1.2 题目分析
根据题意,我们需要修复AAA型以及AABB型。遍历一遍字符串,创建一个StringBuilder变量sb进行模拟,判断什么情况下可以往sb中追加:
- 排除AAA型:当遍历字符串的索引小于2或者当前值不等于sb中的最后一个元素或者当前值不等于sb中倒数第二个元素时AAA型会被排除掉。
- 排除AABB型:当前索引位置小于3或者当前值不等于sb中的最后一个元素或者sb中倒数第二个元素不等于倒数第三个元素
辅助理解: AAA型——>长度小于2、abc(c此时不等于倒数第一个b)、abb(b此时不等于倒数第二个a) AABB型——>长度小于3、aabc(c此时不等于倒数第一个b)、abcc(c之前的倒数第二个b和倒数第三个a不相等)
1.3 代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (sc.hasNext()) {
String str = sc.next();
String ans = correct(str);
System.out.println(ans);
}
}
// 矫正修复字符串
public String correct(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = s.charAt(i);
// 排除AAA型
if (i < 2 || ch != sb.charAt(sb.length() - 1) || ch != sb.charAt(sb.length() - 2)) {
// 排除AABB型
if (i < 3 || ch != sb.charAt(sb.length() - 1) || sb.charAt(sb.length() - 2) != sb.chatAt(sb.length() - 3)) {
sb.append(ch);
}
}
}
return sb.toString();
}
} 
京公网安备 11010502036488号