万万没想到之聪明的编辑

万万没想到之聪明的编辑

http://www.nowcoder.com/questionTerminal/42852fd7045c442192fa89404ab42e92

1 万万没想到之聪明的编辑

1.1 题目描述

​ 对输入字符串进行拼写错误检查,规则:

  1. 三个同样的字母连在一起,一定是拼写错误,去掉一个就好啦:比如helllo --> hello
  2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的第一个字母就好啦:比如helloo --> hello
  3. 上面的规则优先“从左到右”匹配,即如果是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();
    }
}
全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
12 收藏 评论
分享
牛客网
牛客企业服务