序号:1 2 3 4
数组:a a a b
next: 0 1 2 3
注意上边序号、数组和next的对应关系
求next值的过程:
前两位:next数组值前两位一定为01,即aaab中的前两位aa对应01,如上表中next第1,2位为0和1.其实这就可以选出答案了.
第三位:3a前面是2a(2a表示序号为2的a),2a的next数组值为1,找到序号为1的字符, 即1a,将2a和1a相比,两者相同,都是a,则3a的next值为2a的next值加1,即2;
第四位:4b前3a的next为2,找到序号为2的字符, 即2a, 将3a与2a相比,二者相同,则其next值为3a的next加1,为3.
结果为0123,选A
如果比较的时候碰到与前一位字符“不同”怎么办?如求下列序号4的next值
序号: 1 2 3 4
数组: a a b a
next: 0 1 2 1
以前一位的next值为序号,找到这个序号对应的字符,再进行比较,4a前一位是3b, next值为2, 找到序号2对应的2a, 比较3b和2a, 两者不同, 再重复这一步骤, 找到2a的next值是1,比较3b和1a, 不同, 那么所求的4a的next就是1, 如果相同就是2a的next值加1,为2。
做个练习:xyxyyxxyx,求它的next数组?
答案是011231223,你做对了吗?
首先字符串没法比较大小 可以比较长度 如果是比较长度的话可以这样写 这样是吧这个数组的每个元素的字符串长度进行降序排列最大的就是a[0]最小的就是a[a.length-1]public static void main(String[] args) {
String[] a = {"Mary", "Tom", "ha"}
String max=a[0]//
String min=a[a.length-1]
for(int i=0i<a.lengthi++){
for(int j=i+1j<a.lengthj++){
if(a[i].length()<a[j].length()){
String temp
temp=a[i]
a[i]=a[j]
a[j]=temp
}
}
}
for(int x=0x<a.lengthx++){
System.out.println(a[x])
}
}