去除多余空格

566 篇文章

已下架不支持订阅

472 篇文章

已下架不支持订阅

141 篇文章

已下架不支持订阅

题目解析

本题考察逻辑模拟。主要有两个逻辑:

  1. 判断哪些位置需要被删除
  2. 更新关键词位置

对于第1点:

  • 若当前位置不是空格字符,则不需要删除
  • 若当前位置是空格字符,但是前一个位置不是空格字符,则当前位置不是多余空格,不需要删除
  • 若当前位置是空格字符,且前一个位置也是空格字符,但是当前位置处于成对单引号内,因此不需要删除
  • 其余情况都需要删除

上面逻辑中,如何判断一个字符是否处于成对单引号内?

我们可以定义一个哨兵 isClose,初始为true,表示当前位置不处于成对单引号内。当我们遍历文本,遇到单引号字符时,则将 isClose 取反。

这样,我们根据 isClose 变量值即可判断,当前位置字符是否处于单引号内。

对于第2点,每当我们遇到一个要删除的位置 i 时,则遍历所有关键词 ranges,检查被遍历关键词 ranges[i]:{start, end} 是否在 i 位置之后(即 i < start),若是,则该区间的偏移量 offsets[i] += 1。

需要注意的是:

这里不是直接修改 ranges[i],比如:每发现一个删除位置 i < ranges[i][0] 时,就进行 ranges[i][0] -= 1,ranges[i][1[ -= 1。<

已下架不支持订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值