【发布时间】:2019-05-03 22:47:45
【问题描述】:
我最近在一次编码面试测试中遇到了一个问题。问题如下。
假设有一个向用户发送消息的服务。每条消息的长度最多为 30 个字符。此服务接收完整的消息,然后将其分解为子消息,每个子消息的大小最多为 30 个字符。但是服务有问题。它不保证用户接收子消息的顺序。因此,对于每个子消息,它附加一个后缀 (k/n),其中 k 表示 n 个子消息中的第 k 个子消息。计算子消息中不能超过 30 的字符数时也会考虑此后缀。求发送所需的最小子消息数。
例如-1:
消息:敏捷的棕狐跳过懒狗
第一个子消息可以是:棕狐快跳(1/2)但是
以上内容不正确,超过 30 个字符。这有 31 个字符。
所以,正确的子消息是:
敏捷的棕狐 (1/2)
跳过懒狗(2/2)
所以,答案是 2。
Eg-2:
消息:敏捷的棕狐跳过懒惰的乌龟
所以,正确的子消息是:
敏捷的棕狐 (1/3)
跳过懒惰的人(2/3)
乌龟 (3/3)
所以,答案是 3。
Eg-3:
消息:你好,我的名字是
子消息:你好,我的名字是
答案 = 1。
注意:一个词不能在子消息中被打断。假设没有一个词的长度超过 30 个字符。如果是单条消息,则无需使用后缀
我的方法:如果字符串的总字符长度小于 30,则返回 1。如果不是,则获取子消息,直到字符数为 30,检查每个单词。但是现在它变得复杂了,因为我不知道后缀中n 的值。有没有更简单的方法来解决这个问题?
【问题讨论】:
-
好吧,如果不浏览整个消息,您将无法知道
n,因为您无法知道它是如何构造的(15 个字符的消息是一个极端),因此您需要将其“拆分”为带有n(例如0)占位符的消息,获取n,使用真正的n再次传递(如果>9,消息边界可能会改变),重复直到n保持不变。对我来说,您如何以不同的方式做到这一点并不明显,很想知道是否存在这种方式。
标签: string algorithm optimization greedy