static final int LONGEST_STR_LEN = 8192;     public int getLongestStrStartIndex(int l, int r) {         int mid = (l + r) / 2;         if (getMaxLength(l, mid) == LONGEST_STR_LEN) { //最长字符串出现在左边             return getLongestStrStartIndex(l, mid);         }         if (getMaxLength(mid + 1, r) == LONGEST_STR_LEN) {//最长字符串出现在右边             return getLongestStrStartIndex(mid + 1, r);         }         //最长字符串在中间, 剩下的工作是二分找从 l 至 mid 中 getMaxLength最大的下标, 就是最后的答案.         //        |___________|_____________|_______________________________|         //        l     A     B      C     mid                              r         // 先比较 int b = getMaxLength(B, mid) 和 int c = getMatLength(C, mid)         // 如果一样, 说明要的结果在 (c, mid)中间, 继续二分.         // 如果前者大, 比较int a = getMaxLength(A, mid) 和 b, 如果一样大说明结果在(B, C)中间         // 如果 a 大说明结果在(l, B)中间.         return ...;     } 大概还有更好的解法吧.
点赞 评论

相关推荐

点赞 评论 收藏
转发
牛客网
牛客企业服务