算法题 - 文章病句标识 - Python

189 篇文章 3 订阅

问题描述:

文章病句标识

为了提高文章质量,每一篇文章(假设全部都是英文)都会有m名编辑进行审核,每个编辑独立工作,会把觉得有问题的句子通过下标记录下来,比例 [1, 10]1表示病句的第一个字符, 10表示病句的最后一个字符。也就是从 110个字符组成的句子,是有问题的。
现在需要把多名编辑的有问题的句子合并起来,送给总编辑进行最终的审核。比如编辑A指出的病句是 [1, 10][32, 45];B编辑指出的病句是 [5, 16][78, 94],那么 [1, 10][5, 16]是有交叉的,可以合并为 [1, 16][32, 45][78, 94]

输入示例:

3  # 编辑数
1,10;32,45  # 编辑1感觉有问题的句子
78,94;5,16  # 编辑2感觉有问题的句子
80,100;200,220;16,32  # 编辑3感觉有问题的句子

输出示例:

1,45;78,100;200,220  # 合并之后的结果

问题分析:

先按照第一个关键字排序,然后依次合并。(应该是LeetCode上面的一个题目,但是记不清那个了)

Python3实现:

# 今日头条-算法工程师内推-编程题2(笔试时间2018-08-12 10:00~12:00)
# 排序 然后 依次合并
# @Time   :2018/08/12
# @Author :LiuYinxing


def getMerge(arr):
    arr = sorted(arr, key=lambda x: x[0])  # 以第一个元素为标准排序
    cur, res = arr[0], ''
    for v in arr:
        if cur[1] < v[0]:  # 出现不连接的数据,前一个数据直接写到结果中,并更新当前值
            res = res+str(cur[0])+','+str(cur[1])+';'
            cur = v
        elif cur[1] < v[1]:  # 出现合适的,合并
            cur[1] = v[1]

    res = res + str(cur[0]) + ',' + str(cur[1])
    return res


if __name__ == '__main__':

    n = int(input().strip())
    arr = []
    for i in range(n):
        line = list(map(str, input().split(';')))
        for x in line:
            arr.append([int(x) for x in x.split(',')])

    print(getMerge(arr))

发现问题欢迎指正哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值