我有一个包含文本添加和删除位置的列表,如下所示:
Type Position Text/Length
1. + 2 ab // 'ab' was added at position 2
2. + 1 cde // 'cde' was added at position 1
3. - 4 1 // a character was deleted at position 4
为了更清楚,这就是这些操作的作用:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
---------------------------------
t | e | x | t | | | | |
1. t | a | b | e | x | t | | |
2. c | d | e | t | a | b | e | x | t
3. c | d | e | a | b | e | x | t |
动作的数量可以减少到:
Type Position Text/Length
1. - 1 1 // 't' was deleted at position 1
2. + 1 cdeab // 'cdeab' was added at position 1
或者:
Type Position Text/Length
1. + 1 cdeab // 'cdeab' was added at position 1
2. - 6 1 // 't' was deleted at position 6
这些操作将保存在我的数据库中,并为了优化这一点:如何减少为获得相同结果而要执行的操作数量?有比 O(n*n) 更快的方法吗?
请注意,这些操作是按时间顺序排列的,更改操作的顺序会产生另一个结果。