在C++中重新排列字串以最大化迴文子串的數量


給定任意長度的字串“str”。任務是重新排列字元,使其包含儘可能多的迴文子串,無需新增或刪除任何字元。迴文串是指字元排列後從頭到尾讀音相同的字串。

讓我們看看各種輸入輸出場景:

輸入 - 字串 str = "itnin"

輸出 - 重新排列字串以最大化迴文子串數量的結果是:iinnt。

解釋 - 給定一個字串變數str。我們將重新排列輸入字串的字元,使其成為最大回文串,如果不可能,則返回“不可能”。因此,給定輸入字串的輸出是“iinnt”。

輸入 - 字串 str = "abaaaabb"

輸出 - 重新排列字串以最大化迴文子串數量的結果是:aaaaabbb。

解釋 - 給定一個字串變數str。我們將重新排列輸入字串的字元,使其成為最大回文串,如果不可能,則返回“不可能”。因此,給定輸入字串的輸出是“aaaaabbb”。

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

  • 輸入一個字串型別的變數,例如str,計算字串的大小並將其儲存在一個名為length的變數中。

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

  • 在函式Rearr_string(str, length)內部:

    • 宣告一個大小為26的整型陣列,例如arr[26],並將其初始化為0。

    • 宣告一個名為temp的字串型別臨時變數。

    • 啟動FOR迴圈,從i=0到i小於length。在迴圈內,設定arr[str[i] - 'a']++。

    • 啟動FOR迴圈,從i=0到i小於26。在迴圈內,啟動另一個FOR迴圈,從j=0到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] - 'a']++;
   }
   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

更新於:2021年11月2日

232 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.