zoukankan      html  css  js  c++  java
  • 求字符串前缀最长的连续重复子串(不重叠)

    问题描述

    1 2 3 4 5 6 7 8 9 10 11 12 13
    a b a b a b a b f c e b d

    字符串 ababababfcebd 的长度为 n = 13,现在要求字符串从开始位置1开始最长的连续重复子串(没有重叠。即 ababacb 预期的结果是 ab,而不是 aba。)

    boolean flag = false;	// 标记是否存在这样的子串
    for (int i = n / 2; i >= 1; i--) {
      boolean b = 比较 [1, i] 和 [i + 1, 2 * i] 连续子串是否相等;	// 相等 b 为 true
      if (b == true && flag == false) {
        flag = true;	// 存在
        其它操作
      }
    }
    
    if (flag == false)	// 不存在
      其它操作
    

    上边的例子:

    i flag
    6 [1, 6] [7, 12] false
    5 [1, 5] [6, 10] false
    4 [1, 4] [5, 8] true
    3 [1, 3] [4, 6] true
    2 [1, 2] [3, 4] true
    1 [1, 1] [1, 1] true

    伪代码中的语句 if (b == true && flag == false) 不可以写成 if (b == true) ,因为若写成后者,无法保证是最长的连续重复子串了。

    Reference

  • 相关阅读:
    Java异常面试题
    Quickhit快速击键
    多态and接口
    Java面向对象编程概述
    学生管理系统--分层开发
    类型转换
    文件上传
    ongl(示例3-6 多值类型的数据处理)
    ongl(原始类型和包装类型)
    Interceptor
  • 原文地址:https://www.cnblogs.com/hacker-x/p/13631278.html
Copyright © 2011-2022 走看看