Kodi PHP:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void ReverseInPlace(char* string) {
int len = strlen(string);
int i;
for(i = 0; i < len/2; i++) {
char temp = string[i];
string[i] = string[len - i -1];
string[len-i -1] = temp;
}
}
/* Special Get function that returns 0 if the row or column index are negative */
int GetElement(int* matrix, int numColumns, int i, int j) {
if(i<0 || j<0) {
return 0;
} else {
return matrix[i*numColumns + j];
}
}
int Max(int n1, int n2) {
if(n1>n2) {
return n1;
} else {
return n2;
}
}
int Max3(int n1, int n2, int n3) {
return Max(Max(n1, n2), n3);
}
void FindLongestCommonString(char* str1, char* str2, char** result) {
int numRows = strlen(str1);
int numColumns = strlen(str2);
int* matrix = (int*)malloc(numRows * numColumns * sizeof(int));
int i, j;
for(i = 0; i < numRows; i++) {
for(j = 0; j < numColumns; j++) {
if(str1[i]==str2[j]) {
matrix[i*numColumns + j] = Max3(GetElement(matrix, numColumns, i-1, j-1) + 1,
GetElement(matrix, numColumns, i-1, j),
GetElement(matrix, numColumns, i, j-1));
} else {
matrix[i*numColumns + j] = Max( GetElement(matrix, numColumns, i-1, j),
GetElement(matrix, numColumns, i, j-1));
}
}
}
/* Note: Length of the longest common string is matrix[numColumns * numRows - 1] */
int lenLCM = matrix[numColumns * numRows - 1];
*result = (char*) malloc((lenLCM +1) * sizeof(char));
/* Backtrack to find the string */
i = numRows - 1;
j = numColumns - 1;
int k = 0;
while (k < lenLCM) {
if (GetElement(matrix, numColumns, i, j) ==
GetElement(matrix, numColumns, i-1, j)) {
i--;
} else if (GetElement(matrix, numColumns, i, j) ==
GetElement(matrix, numColumns, i, j-1)) {
j--;
} else { /* str1[i] == str2[j] */
(*result)[k] = str1[i];
i--;
j--;
k++;
}
}
(*result)[lenLCM] = 0;
free(matrix);
ReverseInPlace(*result);
}
int main(int argc, char* argv[])
{
if(argc!=3) {
printf("Usage: %s <string1> <string2>\n", argv[0]);
return 1;
}
char* result;
FindLongestCommonString(argv[1], argv[2], &result);
printf("The Longest Common String between %s and %s is:\n\t%s\n", argv[1], argv[2], result);
free(result);
return 0;
}
Krijoni Kontakt