万万没想到之聪明的编辑

万万没想到之聪明的编辑

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();
    }
}
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
12
收藏
分享
牛客网
牛客企业服务