我有一个应用程序,用户将文本输入自定义文本区域。如果用户点击文本区域,它会将光标移动到他们刚刚点击的点,从而使他们能够在文本区域的任何位置插入/删除文本。限制在文本区域的开头不能有空格,并且文本区域中的任何点都不能有连续的空格(也没有返回键来创建新行)。文本区域中的文本存储在名为“text”的属性字符串中。
我需要开发的是一种有效的算法,可以跟踪文本区域中最宽的单词。当我说最宽的时候,我不是指字符宽度,而是我通过将文本存储在CTFrameRef
并获得其大小来计算的实际像素宽度。
我已经想出了很多可以实现的蛮力方法,但我想知道是否有人知道什么是时间和空间最有效的方法来实现这一目标?我显然需要一种跟踪每个单词及其长度的数据结构,并且我已经考虑将所有单词存储在一个数组中并在插入或删除文本时更新它们,但是想知道是否有人可以想到更多最佳?
答案 0 :(得分:1)
如果您可以找到(或写入)包含modify-key
操作的内容,则可以使用min-heap执行此操作。你需要increase-key
和decrease-key
,但好消息是两者都可以在O(log N)中实现。