富文本编辑器大家都熟。在大部分的场景中,富文本编辑器的角色和文本输入框差不多,用户输入了一些带格式的文本,系统将这些文本保存到数据库。但是在专业的文档管理中,必须要考虑的一个问题是:如何做协同编辑? 多人同时编辑一份文档,需要保证每个人的变更都生效,且每个人看到的文档是一致的。针对这个问题,本文探讨如下几个内容。
- 什么是OT? OT如何解决协同编辑的问题?
- 介绍一个基于OT进行文档同步的工具:ShareDB
- 如何用Qull编辑器实现协同编辑
最长公共子串
个数
const fn = (s1, s2) => { let len = 0; let res = 0; // let ans = '' for(let i = 0; i < s1.length; i++) { while(s2.includes(s1.substr(i, len + 1)) && len < s1.length -i) { len++; } if(len > res) res = len; // if(len > res) { // res = len; // ans = s1.substr(i - res, res) // } len = 0; } return res; } console.log(fn('flow', 'aflowbxx')) // 好理解 const fn = (s1, s2) => { let left = 0; let max = 0; while(left < s1.length) { let right = 0; while(right < s2.length) { let str = s1.substring(left,right) if(s2.indexOf(str)>-1){ if(max<str.length) { max = str.length } } right++; } left++; } return max } console.log(fn('flow', 'aflowbxx'))最长公共子串--字符串
const LongCommonStr = (str1, str2) => { let dp = Array.from(Array(str1.length + 1), (_, i) => Array(str2.length + 1).fill(0)); let map = new Map(); let max = 0; for(let i = 1; i <= str1.length; i++) { for(let j = 1; j <= str2.length; j++) { if(str1[i - 1] === str2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; max = Math.max(max, dp[i][j]); if(!map.has(max)) map.set(max, i); } } } return str1.substring(map.get(max) - max, map.get(max)); } console.log(LongCommonStr('1AB2345CD', '12345EF'))