Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm chỉ mục i sao cho tiền tố của S1 và hậu tố của S2 cho đến khi tôi tạo thành một palindrome khi được nối trong C ++

Khái niệm

Đối với hai chuỗi S1 và S2 đã cho có độ dài bằng nhau, nhiệm vụ của chúng ta là xác định chỉ số i sao cho S1 [0… i] và S2 [i + 1… n-1] cho một palindrome khi được nối với nhau. Nó đã được thấy rằng không thể xác định một chỉ số như vậy sau đó in -1.

Đầu vào

S1 = “pqrsu”, S2 = “wxyqp”

Đầu ra

1

S1 [0..1] =“pq”, S2 [2..n-1] =“ypq”

S1 + S2 =“pqyqp” chỉ ra là một palindrome.

Đầu vào

S1 = “pqrst”, S2 = “qprqz”

Đầu ra

-1

Phương pháp

  • Lúc đầu, chúng tôi lặp lại từ 0 đến n (độ dài của chuỗi) và sao chép ký tự thứ i từ S1 sang một chuỗi khác (giả sử đó là S).
  • Sau đó, chúng tôi lấy một chuỗi tạm thời khác và sao chép các ký tự của S2 từ chỉ mục i +1 sang n.
  • Cuối cùng, chúng tôi xác minh xem chuỗi (S + temp) có phải là palindrome hay không.

Ví dụ

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Shows function that returns true if s is palindrome
bool isPalindrome(string str){
   int i = 0;
   int b = str.length() - 1;
   while (i< b) {
      if (str[i] != str[b])
         return false;
      i++;
      b--;
   }
   return true;
}
// Shows function to return the required index
int getIndex1(string S1, string S2, int n){
   string S = "";
   for (int i = 0; i< n; a++) {
      // Used to copy the ith character in S
      S = S + S1[i];
      string temp = "";
      // Used to copy all the character of string s2 in Temp
      for (int b = i + 1; b < n; b++)
         temp += S2[b];
      // Verify whether the string is palindrome
      if (isPalindrome(S + temp)) {
         return i;
      }
   }
   return -1;
}
// Driver code
int main(){
   string S1 = "pqrsu", S2 = "wxyqp";
   int n = S1.length();
   cout << getIndex1(S1, S2, n);
   return 0;
}

Đầu ra

1