1. 求字符串的正向反向最大公共字符串
package item;
public class max_zifu {
public void ss(String s){
String x=s;
String y=””;
String xy=””;
int m=x.length();
for(int i=m;i>0;i–){ //将字符串翻转
y=y+x.substring(i-1,i);
}
for(int ii=0;ii<m;ii++){
for(int j=ii;j<m;j++){
// 前两个for循环实现正向字符串的所有可能出现的字符,除过一个字符。
String sub=x.substring(ii,j+1);
//System.out.println(sub);
for(int jj=0;jj<m;jj++){
for(int z=jj;z<m;z++){
// 中间两个for循环实现反向字符串的所有遍历,同样除过一个字符串的情况
String subfan=y.substring(jj,z+1);
if(sub.equals(subfan)){
//如果出现相等则保存起来
if(sub.length()>xy.length()){
//如果后面有相等的公共字符串,并且其长度大于前两边相等的公共字符串,则将其覆盖掉。
xy=sub;
}
}
}
}
}
}
System.out.println(xy);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
max_zifu ff=new max_zifu();
ff.ss(“1234566”);
}
}
package item;
public class Max_Zufu {
public static void main(String[] args) {
// TODO 自动生成方法存根
String x = “AE”,y=””,xy=””;
for (int i = x.length(); i > 0; i–) {
y = y + x.substring(i – 1, i);
}
for (int i = 0; i < x.length(); i++) {
for (int j = i; j < x.length(); j++) {
String sub = x.substring(i, j + 1);
int z = y.indexOf(sub);
if (z >= 0&&sub.length()>xy.length())
xy = sub;
}
}
System.out.println(xy);
}
}
2. 如何实现java中的树
import java.io.*;
class dataitem
{
public long ddata; //one data item
public dataitem(long dd) //constructor
{ ddata = dd;
}
public void displayitem() //display item, format “/27”
{ System.out.print(“/”+ddata);
}
} //end class dataitem
class node
{
private static final int order = 4;
private int numitems;
private node parent;
private node childarray[] = new node[order];
private dataitem itemarray[] = new dataitem[order-1];
// connect child to this node
public void connectchild(int childnum, node child)
{
childarray[childnum] = child;
if(child != null)
child.parent = this;
}
// disconnect child from this node, return it
public node disconnectchild(int childnum)
{
node tempnode = childarray[childnum];
childarray[childnum] = null;
return tempnode;
}
public node getchild(int childnum)
{ return childarray[childnum]; }
public node getparent()
{ return parent; }
public boolean isleaf()
{ return (childarray[0]==null) ? true : false; }
public int getnumitems()
{ return numitems; }
public dataitem getitem(int index) //get dataitem at index
{ return itemarray[index]; }
public boolean isfull()
{ return (numitems==order-1) ? true : false; }
public int finditem(long key) // return index of
{ // item (within node)
for(int j=0; j<order-1; j++) // if found,
{ // otherwise,
if(itemarray[j] == null) // return -1
break;
else if(itemarray[j].ddata == key)
return j;
}
return -1;
} //end finditem
public int insertitem(dataitem newitem)
{
//assumes node is not full
numitems++; // will add new item
long newkey = newitem.ddata; //key of new item
for(int j=order-2; j>=0; j–) //start on right,
{ //examine items
if(itemarray[j] == null) //if item null,
continue; //go left one cell
else // not null,
{ // get its key
long itskey = itemarray[j].ddata;
if(newkey < itskey) //if its bigger
itemarray[j+1] = itemarray[j]; //shift it right
else
{
itemarray[j+1] = newitem; //insert new item
return j+1; // return index to
} // new item
} // end else (not null)
} // end for //shifted all items,
itemarray[0] = newitem; //insert new item
return 0;
} // end insertitem()
public dataitem removeitem() // remove largest item
{
// assumes node not empty
dataitem temp = itemarray[numitems-1]; // save item
itemarray[numitems-1] = null; //disconnect it
numitems–; //one less item
return temp; //return item
}
public void displaynode() //format “/24/56/74/”
{
for(int j=0; j<numitems; j++)
itemarray[j].displayitem(); // “/56”
System.out.println(“/”); // final “/”
}
} //end class node



