簡體   English   中英

如何找到給定字符串的最長重復子字符串

[英]How to find the longest repeated substring of given string

我是新的java,我被賦予了分配以找到字符串中最長的子字符串。 我在網上研究,看來解決這個問題的好方法是實現后綴樹。 請告訴我如何做到這一點,或者如果您有任何其他解決方案。 請記住,這是假設用低水平的java知識完成的。

謝謝,謝謝。

PS測試儀字符串令人放心。

    /**
This method will find the longest substring of a given string.
String given here is reassuring. 

 */
public String longestRepeatedSubstring()
{
    String longestRepeatedSubstring = "";
    for (int i = 0; i<text.length(); i++ )
    {
        String one = text.substring(0,i); 

        for(int o = 0; o<text.length();o++)
        {
            Sting two = text.substring(0,o);
            if(one.equals(two))
            {
                longestRepeatedSubstring = one;
            }

        }

    }
    return longestRepeatedSubstring; 
}

如果您調試代碼,您將看到代碼沒有按照您的想法進行。 AFAIK你需要至少三個循環,你不能假設你只會從第一個角色開始。 這是一種可能的解決方案。

public static void main(String[] args) throws IOException {
    String longest = longestDuplicate("ababcaabcabcaab");
    System.out.println(longest);
}

public static String longestDuplicate(String text) {
    String longest = "";
    for (int i = 0; i < text.length() - 2 * longest.length() * 2; i++) {
        OUTER:
        for (int j = longest.length() + 1; j * 2 < text.length() - i; j++) {
            String find = text.substring(i, i + j);
            for (int k = i + j; k <= text.length() - j; k++) {
                if (text.substring(k, k + j).equals(find)) {
                    longest = find;
                    continue OUTER;
                }
            }
            break;
        }
    }
    return longest;
}

版畫

abcaab

對於“放心”它打印r不是s這是我的第一個猜測。 ;)

public static void main(String[] args) {
        String str = "testingString";
        char[] strArr = str.toCharArray();
        StringBuilder bm = new StringBuilder();
        boolean isPresent = false;
        int len = strArr.length;
        int initial =0;
        int dinitial=0;

        HashMap<String, String> hm = new HashMap<String,String>();
        HashMap<String, String> hl = new HashMap<String,String>();
        while(initial<=len-1 && !(dinitial>=len-1)){
            if(!hm.isEmpty()){
                isPresent = hm.containsValue(strArr[initial]+"");
                if(!isPresent){
                    bm.append(strArr[initial]);
                    hm.put(strArr[initial]+"",strArr[initial]+"");
                    if(initial==len-1){
                        System.out.println("Longest substring is::" + bm);
                        break;
                    }
                }
                else if(isPresent){
                    System.out.println("Longest substring is::" + bm);
                    bm.delete(0, bm.length());
                    ++dinitial;
                    initial--;
                    hm.clear();
                }
                initial++;
            }
            else
            {
                    bm.append(strArr[initial]);
                    hm.put(strArr[initial]+"",strArr[initial]+"");
                    initial++;
            }
        }
        hm.clear();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM