首頁  >  文章  >  後端開發  >  重排字串以最大化C++中回文子字串的數量

重排字串以最大化C++中回文子字串的數量

PHPz
PHPz轉載
2023-09-13 22:29:02853瀏覽

重排字串以最大化C++中回文子字串的數量

我們得到一個任意給定長度的字串「str」。任務是以這樣的方式重新排列字符,使得在不從給定輸入字串中添加或刪除字符的情況下,將有最大的子字串成為回文字串。回文字串是字元以從頭到尾發音相同的方式排列的字串。

讓我們來看看這種情況的各種輸入輸出場景-

輸入− string str = "itnin"

#輸出− 重新排列字串以最大化回文子字串的數量為:iinnt。

解釋- 我們得到一個字串類型變量,比如說 str。現在我們將重新排列輸入字串的字符,使其成為最大回文字串,如果不可能,則返回“NOT POSSIBLE”。因此,給定輸入字串的輸出為“iinnt”。

輸入− string str = "abaaaabb"

#輸出 − 重新排列字串以最大化回文子字串的數量是:aaaaabbb。

解釋 − 我們給出一個字串類型變量,比如說 str。現在我們將重新排列輸入字串的字符,使其成為最大回文字串,如果不可能,則返回“NOT POSSIBLE”。所以給定輸入字串的輸出是aaaaabbb'

下面程式中使用的方法如下

  • 輸入字串變數假設輸入str 並計算字串的大小並將其儲存在名為length 的變數中。

  • 將資料傳遞給函數 Rearr_string(str, length)。

  • 在函數Rearr_string(str, length) 內部

    • 宣告一個大小為26 的整數型別例如說arr[26] 並用0初始化它。

    • 宣告一個字串類型的暫存變數「temp」。

    • 開始從 i 到 0 迴圈 FOR,直到 i 小於 length。在循環內,設定 arr[str[i] - 'a'] 。

    • 開始迴圈 FOR,從 i 到 0,直到 i 小於 26。在循環內,開始另一個從 j 到 0 的 FOR 循環,直到 j 小於 arr[i]。在循環內,將 temp 設定為 temp (char)(97 i)。

    • 傳回 temp。

  • 列印結果。

範例

#include <bits/stdc++.h>
using namespace std;
string Rearr_string(string str, int length){
   int arr[26] = { 0 };
   string temp = "";
   for(int i = 0; i < length; i++){
      arr[str[i] - &#39;a&#39;]++;
   }
   for(int i = 0; i < 26; i++){
      for(int j = 0; j < arr[i]; j++){
         temp = temp + (char)(97 + i);
      }
   }
   return temp;
}
int main(){
   string str = "itinn";
   int length = str.length();
   cout<<"Rearrangement of the string to maximize the number of palindromic substrings is: "<<Rearr_string(str, length);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將產生以下輸出

Rearrangement of the string to maximize the number of palindromic substrings is: iinnt
#

以上是重排字串以最大化C++中回文子字串的數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除