《2018年2月23日》【连续1235天】
内容:core java5.4,5.5;
1.关于昨天的第三种方法,不一定要用到Map容器,根据ASCII码的性质,字符与数字间的对应关系,可用一个数组来储存字符串,
每个数组相应的位置代表一个字符,里面的元素对应在字符串中出现的位置,重复的会产生覆盖:
所以求一个字符串的无重复元素子字符串可以有如下解法:
public class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length(), ans = 0;
int[] index = new int[128]; //ASCII码
for (int j = 0, i = 0; j < n; j++) {
i = Math.max(index[s.charAt(j)], i);
ans = Math.max(ans, j - i + 1);
index[s.charAt(j)] = j + 1; //逐个将数组填充,并且相同的元素会覆盖数组,当覆盖后,数组上的数字就是对应ASCII码的字符在
//字符串枚举到的最后位置;
}
return ans;
}
}
2.
对于方法,它想要改变参数的值,只能将后面加Holder,而通过封装对象还是原始类型都没有;
3.变参:
printf的定义大致如下:
public class PrintStream
{
public PrintStream printf(String fmt,Object...args ) {return format(fmt,args);}
}
其中,Object...args是java的代码,表面函数可接受任意数量的参数(除fmt参数);
其内部其实是一个格式化字符串加一个Object[ ];
而Object[ ]包含了其他参数,(当数组里有基本类型时,它们会被自动封装成对象);