4

我有一个应用程序,用户在其中将文本输入到自定义文本区域。如果用户点击文本区域,它会将光标移动到他们刚刚点击的点,从而使他们能够在文本区域的任何位置插入/删除文本。限制是文本区域的开头不能有空格,并且文本区域的任何点都不能有连续的空格(也没有返回键来创建新行)。文本区域中的文本存储在一个名为“text”的属性字符串中。

我需要开发的是一种有效的算法,可以跟踪文本区域中最宽的单词。当我说最宽时,我指的不是字符宽度,而是我通过将文本存储在 a 中CTFrameRef并获取其大小来计算的实际像素宽度。

我想出了很多蛮力的方法来实现这一点,但我想知道是否有人知道在时间和空间上实现这一目标的最有效方法是什么?我显然需要某种数据结构来跟踪每个单词及其长度,并且我考虑将所有单词存储在一个数组中并在插入或删除文本时更新它们,但想知道是否有人能想到更多最佳?

4

1 回答 1

1

如果您可以找到(或编写)包含该操作的一个,则可以使用min-heap来执行此modify-key操作。您将需要两者increase-keydecrease-key但好消息是两者都可以在 O(log N) 中实现。

于 2012-10-09T16:30:46.347 回答