Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

พิมพ์คำนำหน้าที่ยาวที่สุดของสตริงที่กำหนดซึ่งเป็นส่วนต่อท้ายของสตริงเดียวกันในโปรแกรม C


กำหนดสตริงที่เราต้องตรวจสอบว่าความยาวของคำนำหน้าที่ยาวที่สุดซึ่งเป็นส่วนต่อท้ายของสตริงเช่นมีสตริง "abcab" ดังนั้น "ab" ในที่นี้มีความยาว 2 และเป็นสตริงย่อยที่ยาวที่สุดพร้อมคำนำหน้าเดียวกันและ คำต่อท้าย

ตัวอย่าง

Input: str[] = { “aabbccdaabbcc” }
Output: 6
Input: abdab
Output: 2

หากเราจะเริ่มต้นตัวชี้ตั้งแต่ต้นและสิ้นสุดของสตริง กว่าที่พวกเขาจะได้รับการคาบเกี่ยวกันในบางจุด แทนที่จะทำเช่นนั้น เราจะแยกสตริงออกจากตรงกลางและเริ่มจับคู่สตริงซ้ายและขวา หากมีขนาดส่งคืนเท่ากันของสตริงที่ตรงกัน ให้ลองใช้ความยาวที่สั้นกว่าทั้งสองด้าน

อัลกอริทึม

int longest(char str[], int n)
START
STEP 1 : DECLARE length AS 0 AND i AS n/2
STEP 2 : IF n < 2 THEN
   RETURN 1
STEP 3 :LOOP WHILE TILL str[i]!='\0'
   IF str[i] == str[length] THEN,
      INCREMENT length BY 1
      INCREMENT i BY 1
   ELSE
      IF length == 0 THEN,
         INCREMENT i BY 1
      ELSE
         DECREMENT length BY 1
      END IF
   END IF
END WHILE
RETURN length
STOP

ตัวอย่าง

#include <stdio.h>
int longest(char str[], int n){
   int length = 0, i = n/2;
   if( n < 2 )
      return 1;
   while( str[i]!='\0' ){
      //When we find the character like prefix in suffix,
      //we will move the length and i to count the length of the similar prefix and suffix
      if (str[i] == str[length]){
         ++length;
         ++i;
      } else //When prefix and suffix not equal{
         if(length == 0)
            ++i;
         else
            --length;
      }
   }
   return length;
}
int main(int argc, char const *argv[]){
   char str[] = {"abccmmabcc"};
   int n = sizeof(str)/sizeof(str[0]);
   int length = longest(str, n);
   printf("Length = %d", length);
   return 0;
}

ผลลัพธ์

หากเรารันโปรแกรมด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้:

Length = 4