java – 重复但重叠的字符串的算法

我需要编写一个方法,我给了一个字符串,我需要返回包含s作为连续子字符串的最短字符串两次。

然而,两次发生的事件可能重叠。例如,

> aba返回ababa
> xxxxx返回xxxxxx
> abracadabra返回abracadabracadabra

到目前为止,我的代码是:

import java.util.Scanner;

public class TwiceString {

    public static String getShortest(String s) {
        int index = -1, i, j = s.length() - 1;
        char[] arr = s.toCharArray();
        String res = s;

        for (i = 0; i < j; i++, j--) {
            if (arr[i] == arr[j]) {
                index = i;
            } else {
                break;
            }
        }

        if (index != -1) {
            for (i = index + 1; i <= j; i++) {
                String tmp = new String(arr, i, i);
                res = res + tmp;
            }
        } else {
            res = res + res;
        }

        return res;
    }

    public static void main(String args[]) {
        Scanner inp = new Scanner(System.in);
        System.out.println("Enter the string: ");
        String word = inp.next();

        System.out.println("The requires shortest string is " + getShortest(word));
    }
}

我知道我可能在算法级别错误,而不是在编码级别。我的算法应该是什么

使用suffix tree.特别是,在您构建树之后,请转到表示整个字符串的叶子,然后向上走,直到看到另一个字符串结束标记。这将是最长后缀的叶,也是s的前缀。
http://stackoverflow.com/questions/11490290/algorithm-for-duplicated-but-overlapping-strings

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 重复但重叠的字符串的算法