Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int findmax(char **commons, int size) {
- int i, max=0, maxPlace;
- //Find The Longest String
- for(i=0;i<size;i++) {
- if(strlen(commons[i]) > max) {
- max = strlen(commons[i]);
- maxPlace = i;
- }
- }
- return maxPlace; // Return The Longest String Index
- }
- char *strdupCommons(char *str, int flag)
- {
- int i;
- char *ptr;
- if(flag) { //We Need Shorter String
- // Customized Strdup
- for(i=0;i<strlen(str)-1;i++)
- ptr = (char *)malloc( (i+1) * sizeof(char) );
- ptr[i]='\0';
- for(i-=1;i>=0;i--)
- ptr[i]=str[i];
- }
- else { // Near The End We Dont Need Shorter String
- ptr = strdup(str); // Regular Strdup
- }
- return ptr;
- }
- void main() {
- char str1[] = "C exam question 3 fall 2011";
- char str2[] = "C program exam fall 2011 questions";
- char **commons = NULL; // Commons String Array
- char temp[100]; // Temporary String
- int flag = 0; // 0 - UnCommon / 1 - Common
- int i, j = 0, comi = 0; // Indexes
- for(i=0;str1[i]!='\0';i++) { // Run On Str1
- strncpy(temp,&str1[j],i+1); // Copy Str1(From Place j To i+1) To Temp - SubString
- temp[i+1]='\0'; // Close The SubString
- if(strstr(str2,temp) != NULL && str1[i+1]!='\0') // Check If The SubString Exist On Str2
- flag=1;
- else if(flag==1) { // Not Exist Anymore But Was Exist
- commons = (char **) realloc(commons, (comi+1) * sizeof(char *)); //Allocate Memory For Strings Array
- if(str1[i+1]!='\0') // Check If We Near The End, Send Flag 1 To strdupCommons
- commons[comi] = strdupCommons(temp,1);
- else // Send Flag 0 To strdupCommons
- commons[comi] = strdupCommons(temp,0);
- comi++; // Make The Commons Index(For The Strings Array) Bigger;
- flag = 0; // Flag Is On UnCommon State
- j=i; // j is now like i (Start Substring from j)
- //puts(commons[comi-1]); //Print The Common Strings
- }
- else
- j=i; // j is now like i (Start Substring from j)
- }
- printf("Longest Common Subsequence Is: %s With %d Chars\n", commons[findmax(commons,comi)], strlen(commons[findmax(commons,comi)]) );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement