注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
做OA之前在地里看了很多帖子,大概就是text editor,image replication, team collaboration这三道。很幸运地准备了text editor并且碰到了。在这里分享一下题目没有讲明的corner case(事实证明test里面没有这样的)
题目复述:. 1point3acres.com
TextEditor实现以下功能:append, backspace, undo, redo, select, bold. input长这样:String[][] input
append: 在当前字符串结尾append或将选中的字符串replace e.g. ["1", "APPEND", "hello"]
backspace: 删掉当前字符串最后一位或选中的字符串 e.g. ["2", "BACKSPACE"]
undo: 撤销上一步操作 e.g. ["3", "UNDO"] ..
redo: 把上一步被撤销的操作重做 e.g. ["4", "REDO"]
select: 选中当前字符串的某一部分, 给定了[start, end) e.g. ["5", "SELECT", 3, 6]
bold: 将选中的字符串bold e.g. ["6", "BOLD"]
题目要注意的点和corner case:
0. 操作顺序应该按照linux timestamp排序,也就是每个array的第一个element。
1. backspace 如果已经没有字符串可以删了,这就是一个无效操作, ignore即可。
2. undo 如果已经没有操作可以撤销了,就是一个无效操作, ignore。-baidu 1point3acres
3. redo 如果已经没有操作可以重做了(#redo > #undo),ignore。注意redo只能接在undo/redo后面。. 1point3acres.com
4. select 如果操作的end超过了当前字符串的末尾,就选到末尾。如果有连续多个select,只有最后一个有效。如果start出界了,整个操作ignore。. ----
我想到的但题目没有clarify清楚的:
1. select start >= end?我当做ignore处理了
2. bold 前面没有select? 当做ignore处理了
这样处理完最后所有test case都跑过了
实现undo/redo的思路是,用一个stack存所有被undo的operation,后面遇到redo就从栈中取出。注意每遇到非undo/redo操作的时候要清空栈。
希望能帮到大家呀!!!如果觉得有用麻烦加点米呀!!!想看面经无奈米不够哇!!
|