刷刷刷,代码敲起来嘻嘻---力扣字符串->459. 重复的子字符串

背景,通过2020年一年的日夜学习,自己技术方面大部分都有涉略,虽然暂时还不精通,特别是对以前不懂的多线程和数据库优化以及jvm和分布式部分大概进行了学习并敲了项目,以为金三银四的机会到了,自己要进大厂,唉,现实总是很骨感,投了简历,很多都要求算法,我前面是根本没刷过力扣(非科班,一起努力),感觉面试时共享屏幕被看着写,跟我被套了狗头的w或者虚弱一样,难受,本来就很难写了,被人盯的痒痒,面到算法基本都挂了,很受打击,自暴自弃了两天,不想学习了,也不想努力了,还去打了一晚上lol,后面想想,感觉确实是自己问题太大,平时业务增删改查,也没太难的业务,自己思维都慢慢钝化了,准备今年刷完easy,再刷一些中等难度的吧,面试应该会好些,一起加油啊。

有什么问题都可以一起讨论哈,都是新手嘻嘻

package letecode.string;

/**
 * 459. 重复的子字符串
 * 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
 */
public class RepeatableStr {
    public static void main(String[] args) {
        String str = "abaababaab";
        Boolean result = isRepeatableStr(str);
        System.out.println("result = " + result);
    }

    /**
     * 思路就是从第一个字符串开始,找到和第一个字符串一样的,然后截取这段一样的,看是否能被整除,可以被整除,则将整除的次数算出来,将基础
     * 字符增加整除的次数,看是否和原始字符串相等,如果不能整除就继续往后找和第一字符串一样的,再截取,继续这样判断,可能还有别的思路,我目前
     * 还比较菜,只看了小灰算法这本书,看到了树,继续加油。
     * @param str
     * @return
     */
    private static Boolean isRepeatableStr(String str) {
        char[] chars = str.toCharArray();
        char first = chars[0];
        Boolean flag = false;
        for (int i = 1; i < chars.length; i++) {
            if (first == chars[i]){
                String baseStr = str.substring(0,i);
                if (str.length()%baseStr.length() == 0){
                    int forTimes = str.length()/baseStr.length();
                    String repeatStr ="";
                    for (int j = 0; j < forTimes; j++) {
                        repeatStr = repeatStr + baseStr;
                    }
                    if (repeatStr.equals(str)){
                        flag = true;
                        break;
                    }
                }
            }
        }
        return flag;
    }

}
艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
原文地址:https://www.cnblogs.com/lovelywcc/p/14582292.html