首頁 > 後端開發 > C++ > 透過顛倒所有回文單字的出現順序來修改句子

透過顛倒所有回文單字的出現順序來修改句子

WBOY
發布: 2023-08-27 10:01:12
轉載
698 人瀏覽過

透過顛倒所有回文單字的出現順序來修改句子

問題陳述

我們給了一個字串 str,總共包含 N 個字。我們需要找到給定字串中的所有回文單詞,並透過反轉所有回文單字的順序來創建一個新字串。

範例

輸入

str = ‘nayan was gone to navjivan eye hospital’
登入後複製

輸出

‘eye was gone to navjivan nayan hospital’
登入後複製

說明

此字串包含三個回文字:nayan、navjivan 和 eye。我們顛倒了所有三個單字的順序,並保持所有其他單字相同。

輸入

‘Hello, users! How are you?’
登入後複製

輸出

‘Hello, users! How are you?’
登入後複製

說明

它提供相同的輸出,因為字串不包含任何回文單字。

輸入

‘Your eye is beautiful.’
登入後複製

輸出

‘Your eye is beautiful.’
登入後複製

說明

它提供與僅包含單一回文單字的字串相同的輸出。

方法 1

在這種方法中,我們首先將字串拆分為單字。之後,我們將過濾所有回文詞。接下來,我們反轉所有回文詞的順序。

最後,我們遍歷字串,如果當前單字是回文單詞,我們將用另一個回文單字以相反的順序替換它。

演算法

  • 步驟 1 - 透過傳遞一個字串作為傳回結果字串的參數來執行reversePlaindromic()函數。

  • 第 2 步 - 建立 isPalindrome() 函數,用於檢查單字是否為回文。

  • 步驟 2.1 - 將「start」初始化為 0,將「end」初始化為字串長度 – 1。

  • 步驟 2.2 - 使用 while 循環遍歷字串,比較第一個和最後一個字符,比較第二個和倒數第二個字符,依此類推。如果任何字元不匹配,則傳回 false,因為它不是回文字串。

  • 步驟 2.3 - 如果字串是回文,則傳回 true。

  • 第 3 步 - 建立一個向量來儲存字串的單字。另外,定義「temp」變數來儲存該單字。

  • 步驟 4 - 使用 for 迴圈遍歷字串,如果不等於空格 (‘ ’),則將字元附加到臨時值。否則,將 temp 的值推送到 allWords 向量。

  • 步驟 5 - 迭代 allWords 向量並使用 isPalindrome() 函數檢查目前單字是否為回文。如果是,則將該單字推入「palindromWords」向量。

  • 第 6 步 - 反轉「palindromWords」清單。

  • 第 7 步 - 現在,再次迭代「allWords」向量,並檢查目前單字是否是回文。如果是,請將其替換為「palindromWords」清單中受尊重的單字。

  • 第 8 步 - 迭代「palindromWords」列表,並透過將所有單字附加到結果變數來建立一個字串。傳回結果字串。

範例

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Function to check if a string is a palindrome
bool isPalindrome(string str){
   int start = 0;
   int end = str.length() - 1;
   // iterate till start < end
   while (start < end){
      // check if the character at the start and end are not the same and return false, else increment start and decrement end
      if (str[start] != str[end]){
         return false;
      } else {
         start++;
         end--;
      }
   }
   return true;
}
string reversePalindromic(string str) {
   // vectors to store all words and palindromic words
   vector<string> palindromWords;
   vector<string> allWords;
   // variable to store single word
   string temp = "";
   for (char x : str) {
      // If the current character is not space, then append it to temp; else, add temp to palindrome words and make temp NULL
      if (x != ' ') {
         temp += x;
      } else {
         allWords.push_back(temp);
         temp = "";
      }
   }
   // push the last word to all words
   allWords.push_back(temp);
   // fetch all palindromic words
   for (string x : allWords){
      if (isPalindrome(x)){
         // Update newlist
         palindromWords.push_back(x);
      }
   }
   // Reverse the vector
   reverse(palindromWords.begin(), palindromWords.end());
   int k = 0;
   for (int i = 0; i < allWords.size(); i++){
      // If the current word is a palindrome, push it to palindrome words
      if (isPalindrome(allWords[i])){
         allWords[i] = palindromWords[k];
         k++;
      }
   }
   string result = "";
   for (string x : allWords) {
      result += x;
      result += " ";
   }
   return result;
}
int main(){
   string str = "nayan was gone to navjivan eye hospital";
   string reverse = reversePalindromic(str);
   cout << reverse << endl;
   return 0;
}
登入後複製

輸出

eye was gone to navjivan nayan hospital
登入後複製
  • 時間複雜度 - O(N),因為我們迭代長度為 N 的字串。

  • 空間複雜度 - O(K),因為我們使用列表來儲存單字,其中 k 是字串中的單字總數。

結論

我們學會了從句子中獲取所有回文單字並以相反的順序添加它們。在上面的程式碼中,程式設計師可以嘗試更改 isPalindrome() 函數的實作來學習新的東西。

以上是透過顛倒所有回文單字的出現順序來修改句子的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板