背景,通过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;
}
}