zoukankan      html  css  js  c++  java
  • 校招真题练习014 万万没想到之聪明的编辑(头条)

    万万没想到之聪明的编辑

    题目描述
    我叫王大锤,是一家出版社的编辑。我发现一个发现拼写错误的捷径:

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

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

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

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

     1 N = int(input())
     2 for x in range(N):
     3     string = input().strip()
     4     n = len(string)
     5     temp = ''
     6     samecount = 0
     7     i = 0
     8     while i < n:
     9         if i == n - 1:
    10             temp += string[i]
    11             i += 1
    12         elif i + 1 < n and string[i] != string[i + 1]:
    13             temp += string[i]
    14             i += 1
    15         else:#s[i] == s[i+1]
    16             j = i + 1
    17             temp += string[i] + string[j]
    18             base = string[i]
    19             while j < n and base == string[j]:
    20                 j += 1
    21             #s[j] is different from s[i]
    22             if j == n:
    23                 break
    24             else:
    25                 temp += string[j]
    26                 base2 = string[j]
    27                 k = j + 1
    28                 while k < n and base2 == string[k]:
    29                     k += 1
    30                 i = k
    31     print(temp)

    算法思路:滑动窗口。

    在窗口内部“捕捉”以下两种类型的子串:

    1. 连续3个(含)以上相同的字符。处理办法:只保留2个字符。

    2. 连续2个字符之后,出现的连续2个(含)以上的相同字符。处理办法:只保留1个字符。

    捕捉完这两种之后,进行窗口向右平移(更新i值)。

    注意判断边界条件不要越界。

  • 相关阅读:
    rpm命令详解
    Linux基础提高_系统性能相关命令
    Day004_Linux基础命令之特殊符号与正则表达式通配符
    Linux基础_网站权限规划
    Day005_Linux基础之文件权限
    Day003_linux基础_系统启动过程及系统安装后优化
    win7旗舰版安装不了mysql问题-------win7系统版本选择问题的一点探索
    Java程序结构
    NCRE Java二级备考方案
    NCRE的JAVA二级考试大纲
  • 原文地址:https://www.cnblogs.com/asenyang/p/11217896.html
Copyright © 2011-2022 走看看