将字符串分割成三个不重叠的子字符串,并判断拼接后的字符串是否为回文串的子字符串数量


简介

在本教程中,我们将详细阐述一种方法,用于从给定的字符串 s 中找到三个不重叠的子字符串,并将所有子字符串组合在一起形成回文串。为了解决此任务,我们使用了 C++ 编程语言的字符串类特性。

字符串中的回文串是指该字符串在正向和反向读取时都相同。例如,"Madam" 就是一个回文串。

假设有一个字符串 "s",子字符串为 a、b 和 c。当您将 a、b 和 c 组合在一起时,它们会形成一个回文串。以下是一个示例,用于理解问题的逻辑。

语句说明

String s = “abbacab”      
Acceptable substrings of length 3 are: “abb”, “bac”, and “bba”.

当我们将所有三个子字符串连接起来时,生成的字符串是回文串,该字符串为 abbbacbba。

语法

size() 函数属于字符串类,用于获取输入字符串的大小及其字符长度。

string_name,size();  

算法

  • 获取输入字符串。

  • 初始化一个计数器变量,用于跟踪回文子字符串的数量。

  • 使用 3 个嵌套的 for 循环生成 3 个指定长度的可能的子字符串。

  • 第一个内部循环从 0 初始化到字符串长度 - 3。

  • 第二个内部循环从第一个内部循环 + 1 初始化到字符串长度 - 2。

  • 外部循环从第二个循环 + 1 初始化到字符串长度 - 1。

  • 找到所有子字符串后,将它们连接起来。

  • 检查是否存在子字符串回文串,如果存在,则增加计数器变量的值。

  • 打印计数器变量的值。

示例

为了使用 C++ 实现上述算法,我们使用一个输入字符串并生成所有可能的子字符串组合,并且只考虑那些是回文串的子字符串。如果存在此类子字符串,则计数器变量将增加。打印计数器变量的结果。

#include <bits/stdc++.h>
using namespace std;
 
// user defined function to check formed substrings are palindrome or not
bool isStringPalin(int a, int b, int c, int d, int x, int y, string st){
   int begin = a, stop = y;
   while (begin < stop) {
      if (st[begin] != st[stop])
         return false;
 
      begin++;
      if (begin == b + 1)
         begin = c;
      stop--;
      if (stop == x - 1)
         stop = d;
   }
   return true;
}
 
// User defined function to count the number of useful substrings
int countSubString(string st){
   //Counting variable to count and return the number of substrings
   int ct = 0;
   int l = st.size();
 
   //It is to select the first substring
   for (int a = 0; a < l - 2; a++) {
      for (int b = a; b < l - 2; b++){
 
         // This loop selects the second useful substring
         for (int c = b + 1; c < l - 1; c++) {
            for (int d = c; d < l - 1; d++) {
 
               // this for loop will select the third substring
               for (int x = d + 1; x < l; x++) {
                  for (int y = x; y < l; y++) {
 
                     // If condition to check the selected substrings are forming palindrome or not
                     if (isStringPalin(a, b, c, d, x, y, st)) {
                        ct++;
                     }
                  }
               }
            }
         }
      }
   }
   // returning the count variable that stores the number of useful substrings
   return ct;
}
 
// Controlling code
int main(){
   string st = "abcab";
   cout << "The possible number of substrings are: "<< countSubString(st);
 
   return 0;
}

输出

The possible number of substrings are: 4

结论

我们开发了一种方法来查找形成回文串的有效子字符串。为了实现该解决方案,我们使用了 C++ 循环和 if 条件。为了使用 C++ 实现其中一个示例,我们使用了 size() 函数和嵌套循环。嵌套循环有助于查找不同长度的子字符串,而 size() 函数返回字符串的大小。

更新于: 2023-07-31

101 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告