字节跳动2019春招研发[编程题]万万没想到之聪明的编辑

字节跳动2019春招研发[编程题]万万没想到之聪明的编辑

[编程题]万万没想到之聪明的编辑

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:

  1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
  2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
  3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC

我特喵是个天才!我在蓝翔学过挖掘机和程序设计,按照这个原理写了一个自动校对器,工作效率从此起飞。用不了多久,我就会出任CEO,当上董事长,迎娶白富美,走上人生巅峰,想想都有点小激动呢!
……
万万没想到,我被开除了,临走时老板对我说: “做人做事要兢兢业业、勤勤恳恳、本本分分,人要是行,干一行行一行。一行行行行行;要是不行,干一行不行一行,一行不行行行不行。” 我现在整个人红红火火恍恍惚惚的……

请听题:请实现大锤的自动校对程序

输入描述:
第一行包括一个数字N,表示本次用例包括多少个待校验的字符串。

后面跟随N行,每行为一个待校验的字符串。

输出描述:
N行,每行包括一个被修复后的字符串。

输入例子1:
2
helloo
wooooooow

输出例子1:
hello
woow

package com;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @email: [email protected]
 * @description:
 * @author: wajn
 * @create: 2020-04-25 19:32
 **/
public class Test {


    /**
     * 我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。
     * 但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:
     * 

* 1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello * 2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello * 3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC *

* 我特喵是个天才!我在蓝翔学过挖掘机和程序设计,按照这个原理写了一个自动校对器,工作效率从此起飞。 * 用不了多久,我就会出任CEO,当上董事长,迎娶白富美,走上人生巅峰,想想都有点小激动呢! * …… * 万万没想到,我被开除了,临走时老板对我说: “做人做事要兢兢业业、勤勤恳恳、本本分分,人要是行,干一行行一行。 * 一行行行行行;要是不行,干一行不行一行,一行不行行行不行。” 我现在整个人红红火火恍恍惚惚的…… * * @param args */ public static void main(String[] args) { System.out.print("本次用例包括多少个待校验的字符串:"); Scanner scanner = new Scanner(System.in); int max = scanner.nextInt(); List<StringBuilder> words = new ArrayList<>(max); Scanner word = new Scanner(System.in); for (int i = 0; i < max; i++) { System.out.print("待校验的字符串:"); words.add(new StringBuilder(word.next())); } System.out.println("原有字符串:" + words); words.forEach(e -> { handler(e); }); System.out.println("最终字符串:" + words); } /** * @param sb * @return true 代表替换成功 */ private static boolean handlerChars(StringBuilder sb) { char[] chars = sb.toString().toCharArray(); for (int i = 0; i < sb.length(); i++) { //上一个 和 下一个 char aChar_P = 0, aChar_N = 0; //上上个 和 下下个 char aChar_PP = 0, aChar_NN = 0; //当前 char aChar_C = chars[i]; if (i - 1 >= 0) { aChar_P = chars[i - 1]; } if (i - 2 >= 0) { aChar_PP = chars[i - 2]; } if (i + 1 < chars.length) { aChar_N = chars[i + 1]; } if (i + 2 < chars.length) { aChar_NN = chars[i + 2]; } // System.out.print("aChar_PP:" +aChar_PP + " "); // System.out.print("aChar_P:" +aChar_P + " "); // System.out.print("aChar_C:" +aChar_C + " "); // System.out.print("aChar_N:" +aChar_N + " "); // System.out.print("aChar_NN:" +aChar_NN + " ");1 // System.out.println(); if (aChar_N != 0 && aChar_P != 0) { //比如 helllo -> hello if (aChar_C == aChar_N && aChar_C == aChar_P) { sb.deleteCharAt(i); return true; } //AABB型 比如 helloo -> hello if (aChar_PP == aChar_P && aChar_C == aChar_N) { sb.deleteCharAt(i); return true; } } } return false; } private static void handler(StringBuilder sb) { while (handlerChars(sb)) { handlerChars(sb); } } }

你可能感兴趣的:(字节跳动2019春招研发[编程题]万万没想到之聪明的编辑)