求出一个字符串里所有的重复字符串

各位朋友,小弟最近灵感一现,回忆起以前上学的时候未解决的问题:
例如给个字符串(字符串长度和内容不限) ,假定是"abcabbcabc",那么重复的字符串有:a,b,c,ab,bc,abc,bca,bcab
希望大家给出完整的算法实现,不要伪代码,最好能带关键地方的注释
另注:希望大家用JAVA或者Python或者Javascript实现,万不得已用C也行,其他的语言就不用了(小弟不懂),谢谢大家

注释没有,你自己看看。。。
[code="java"]
package cn.com;

import java.util.HashSet;
import java.util.Set;

public class Test {

public static void main(String[] args) {
    String str = "abcabbcabc";
    Set<String> set = new HashSet<String>();
    Set<String> newstr = new HashSet<String>();

    int len = str.length();
    for (int i = 0; i < len; i++) {
        set.add("" + str.charAt(i));
    }
    int maxlen = len % 2 == 0 ? len / 2 : (len - 1) / 2;

    for (int i = 0; i < maxlen; i++) {
        for (int j = i+1 ; j < i+1+maxlen; j++) {
            newstr.add(str.substring(i, j));
        }
    }

    for (String strs : newstr) {
       String strpat = str.replace(strs, "");
       if(strpat.length()<=(str.length()-strs.length()*2)){
           System.out.println(strs);
       }
    }
}

}
[/code]