Java开发能力:
系统学习Java开发的第一天,终于知道Java和Java SE的区别是什么了。。
过完了Java初阶的课程,从Java历史、数据类型到二位数组。Java中阶课程面向对象这一节还没看完,有几点影响还挺深的,大一刚学Java的时候确实没怎么明白。
①方法的重载:之前不知道方法重载有什么用,现在看来就是对象进行一个初始化的作用。
②面向对象为什么叫面向对象。课程里开门装大象的例子还挺形象的,不过两年前学校里好像也是举得这个例子,似乎上课睡着了没听。。
③局部变量和成员变量:大一的时候老师总说,完全没明白有什么区别。。当时就知道一个全局变量。
成员变量:类中方法外定义的变量
局部变量:方法中定义的变量,代码块中定义的变量
④内存分析:好像是第一次接触到Java的内存机制,方法区存放字节码,堆存放对象,栈存放属性。
算法:
今天算法摆烂了,怎么到了字符串这变难了,链表都比这容易。
①实现 strStr():在一个字符串中查找另一个字符串。用到了一个挺重要的东西KMP。KMP的精髓好像是next数组的求解,next数组的精髓又是最小公共前后缀。
next求解代码:
int j = -1;
int[]next = new int[s.length()];
next[0] = j;
for(int i = 1; i <= s.length(); i++){
while(j>=0 && s.charAt(j+1) != s.charAt(i)){
j = next[j];
}
if(s.charAt(j+1) == s.charAt(i)){
j++;
}
next[i] = j;
}
然后比较模板数组s跟给定数组h,方法差不多吧。。
int j = -1;
int[]next = new int[s.length()];
getNext(s,next)
for(int i = 0; i <= h.length(); i++){
while(j>=0 && s.charAt(j+1) != h.charAt(i)){
j = next[j];
}
if(s.charAt(j+1) == h.charAt(i)){
j++;
}
if(j == s.length() - 1){
return (i - s.length() + 1);
}
}
return -1;
②重复的子字符串:又是KMP的题
大概就是求一下给定数组的next数组,然后看一下next数组最后一位的值是多少,代表除去最长公共前后字符串剩下几位,假设剩x位。如果给定字符串的长度除以x能除开,就返回true!
别忘了最后一位得大于等于0。
结束,明天再学
标签:Java,charAt,int,就业,next,数组,字符串,Day From: https://www.cnblogs.com/zygacmg/p/17966540