我最近被问到关于以下问题的编码问题。我有一些解决这个问题的方法,但我不太确定这些方法是否最有效。
问题:
编写一个程序来跟踪一组文本范围。起点和终点将是字符串。
Text range example : [AbA-Ef]
Aa would fall before this range
AB would fall inside this range
etc.
字符串比较就像 'A' < 'a' < 'B' < 'b' ... 'Z' < 'z'
我们需要在这个范围内支持以下操作
- 添加范围- 如果适用,这应该合并范围
- 删除范围- 从跟踪范围中删除范围并重新计算范围
- 查询范围- 给定一个字符,函数应该返回它是否是任何跟踪范围的一部分。
请注意,跟踪范围可以是不连续的。
我的解决方案:
我想出了两种方法。
- 将范围存储为双向链表或
- 将范围存储为某种平衡树,叶节点具有实际数据,并且它们以链表的形式相互连接。
您是否认为这个解决方案足够好,或者您可以想到任何更好的方法来做到这一点,以便这三个 API 为您提供最佳性能?