11.16上机题
class Triple {
int i, j;
int e;
}
class TSMatrix {
Triple[ ] data;
int mu, nu, tu;
}
public class Change {
public String getString ( String s1, String s2) {
char [ ] a= s1. toCharArray ( ) ;
char [ ] b= s2. toCharArray ( ) ;
int l1= s1. length ( ) , l2= s2. length ( ) , maxLen= 0 , maxEnd= 0 ;
int [ ] [ ] flag= new int [ l1] [ l2] ;
for ( int i= 0 ; i< l1; i++ ) {
for ( int j= 0 ; j< l2; j++ ) {
if ( a[ i] == b[ j] ) {
if ( i== 0 || j== 0 ) {
flag[ i] [ j] = 1 ;
} else {
flag[ i] [ j] = flag[ i- 1 ] [ j- 1 ] + 1 ;
}
}
else {
flag[ i] [ j] = 0 ;
}
if ( flag[ i] [ j] > maxEnd) {
maxEnd= flag[ i] [ j] ;
maxLen= i;
}
}
}
return s1. substring ( maxEnd- maxLen+ 1 , maxLen) ;
}
public void FastTransposeSMatrix ( TSMatrix M, TSMatrix T) {
T. mu= M. nu; T. nu= M. mu; T. tu= M. tu;
if ( T. tu!= 0 ) {
int col= 0 ;
int num[ ] = new int [ 100 ] , cpot[ ] = new int [ 100 ] ;
for ( col = 0 ; col < M. nu; col++ )
num[ col] = 0 ;
for ( int t = 0 ; t < M. tu; t++ )
++ num[ M. data[ t] . j] ;
cpot[ 0 ] = 0 ;
for ( col = 1 ; col < M. nu; col++ )
cpot[ col] = cpot[ col - 1 ] + num[ col - 1 ] ;
int q;
for ( int p = 0 ; p < M. tu; p++ )
{
col = M. data[ p] . j;
q = cpot[ col] ;
T. data[ q] . i = M. data[ p] . j;
T. data[ q] . j = M. data[ p] . i;
T. data[ q] . e = M. data[ p] . e;
++ cpot[ col] ;
}
}
return ;
}
public int CreateMatrix ( TSMatrix M, TSMatrix N, TSMatrix Q) {
int i = 1 , j = 1 , k = 1 ;
if ( M. mu != N. mu || M. nu != N. nu)
{
return 0 ;
}
if ( M. tu * N. tu == 0 ) return 1 ;
Q. mu = M. mu; Q. nu = M. nu; Q. tu = 0 ;
while ( i <= M. tu && j <= N. tu)
{
if ( ( M. data[ i] . i == N. data[ j] . i && M. data[ i] . j < N. data[ j] . j) || ( M. data[ i] . i < N. data[ j] . i) )
{
Q. tu++ ;
Q. data[ k] . i = M. data[ i] . i; Q. data[ k] . j = M. data[ i] . j; Q. data[ k] . e = M. data[ i] . e;
i++ ; k++ ;
}
else if ( ( M. data[ i] . i == N. data[ j] . i && M. data[ i] . j > N. data[ j] . j) || ( M. data[ i] . i > N. data[ j] . i) )
{
Q. tu++ ;
Q. data[ k] . i = N. data[ j] . i; Q. data[ k] . j = N. data[ j] . j; Q. data[ k] . e = N. data[ j] . e;
j++ ; k++ ;
}
else if ( M. data[ i] . e + N. data[ j] . e!= 0 )
{
Q. tu++ ;
Q. data[ k] . i = N. data[ j] . i; Q. data[ k] . j = N. data[ j] . j; Q. data[ k] . e = M. data[ i] . e + N. data[ j] . e;
i++ ; j++ ; k++ ;
}
else
{
i++ ; j++ ;
}
}
while ( i <= M. tu)
{
Q. tu++ ;
Q. data[ k] . i = M. data[ i] . i; Q. data[ k] . j = M. data[ i] . j; Q. data[ k] . e = M. data[ i] . e;
i++ ; k++ ;
}
while ( j <= N. tu)
{
Q. tu++ ;
Q. data[ k] . i = N. data[ j] . i; Q. data[ k] . j = N. data[ j] . j; Q. data[ k] . e = N. data[ j] . e;
j++ ; k++ ;
}
return 1 ;
}
}