檢查由字串的前 X 個字元和後 X 個字元組成的字串是否為迴文


在本教程中,我們將探討一個問題陳述,該陳述涉及檢查由給定字串的前 X 個字元和後 X 個字元組合而成的字串是否為迴文。迴文是指正讀和反讀都相同的字元序列。

任務是確定從原始字串開頭和結尾的指定字元派生的結果組合字串是否具有迴文屬性。

為此,我們將深入研究使用 C++ 程式語言的有效解決方案。透過將問題分解成更小的步驟並採用字串操作技術,我們將開發一個程式,該程式可以驗證給定字串是否滿足迴文條件。透過實施此解決方案,我們旨在清楚地理解問題,並提出使用 C++ 解決問題的實用方法。

問題陳述

給定一個字串和一個整數值 X,任務是檢查由給定字串的前 X 個字元和後 X 個字元組成的字串是否為迴文。如果是迴文,則返回 true,否則返回 false。讓我們透過示例來理解這個題意。

示例 1

輸入

String: "helloolleh"; X: 5

輸出

The formed string is a palindrome.

解釋

在這個例子中,輸入字串是 "helloolleh",X 的值是 5。程式從輸入字串中提取前 5 個字元 ("hello") 和後 5 個字元 ("olleh"),並將它們連線起來形成字串 "helloolleh"。由於這個生成的字串是迴文,程式返回 true。

示例 2

輸入

String: "programming"; X: 4

輸出

The formed string is not a palindrome.

解釋

在這個例子中,輸入字串是 "programming",X 的值是 4。程式從輸入字串中提取前 4 個字元 ("prog") 和後 4 個字元 ("ming"),並將它們連線起來形成字串 "progmimg"。由於這個生成的字串不是迴文,程式返回 false。

在這兩個例子中,程式都檢查了由給定字串的前 X 個字元和後 X 個字元組成的字串是否為迴文,並相應地提供了輸出。

演算法

1. 定義一個輔助函式 ‘isPalindrome’,該函式以字串作為輸入並檢查它是否為迴文。從字串的兩端迭代,比較字元。如果發現不匹配,則返回 false。如果迭代完成沒有任何不匹配,則返回 true。

2. 定義主函式 ‘checkPalindromeFormation’,該函式將輸入字串和整數 X 作為引數。

3. 在 ‘checkPalindromeFormation’ 函式中,首先檢查 X 是否為有效值(大於 0 且不大於輸入字串的長度)。如果不是有效值,則返回 false。

4. 使用 ‘substr’ 函式從輸入字串中提取前 X 個字元,並將其賦值給 ‘firstX’ 變數。

5. 同樣,從輸入字串中提取後 X 個字元,並將其賦值給 ‘lastX’ 變數。

6. 將 ‘firstX’ 和 ‘lastX’ 連線起來形成 ‘formedString’。

7. 呼叫 isPalindrome 輔助函式,將 ‘formedString’ 作為引數傳遞,並將結果儲存在布林變數 ‘isPalindromeFormed’ 中。

8. 從 ‘checkPalindromeFormation’ 函式返回 ‘isPalindromeFormed’ 的值。

9. 在主函式中,提供一個輸入字串和一個整數值 X 用於測試。

10. 使用輸入字串和 X 作為引數呼叫 ‘checkPalindromeFormation’ 函式,並將結果儲存在布林變數 ‘isPalindromeFormed’ 中。

11. 列印輸入字串和 X。

12. 列印訊息 "正在檢查由前 X 個字元和後 X 個字元組成的字串是否為迴文…"

13. 使用 if-else 語句檢查 ‘isPalindromeFormed’ 的值。如果為 true,則列印 "生成的字串是迴文"。否則,列印 "生成的字串不是迴文"。

瞭解演算法後,讓我們使用 C++ 示例來實現此演算法。

示例

使用 C++ 實現上述演算法

下面的 C++ 程式檢查由給定字串的前 X 個字元和後 X 個字元組成的字串是否為迴文。它透過提取子字串、連線它們,然後使用輔助函式來檢查迴文屬性來實現。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str) {
   int start = 0;
   int end = str.length() - 1;
   while (start < end) {
      if (str[start] != str[end]) {
         return false;
      }
      start++;
      end--;
   }
   return true;
}
bool checkPalindromeFormation(const std::string& inputStr, int x) {
   if (x <= 0 || x > inputStr.length()) {
      return false;
   }
   std::string firstX = inputStr.substr(0, x);
   std::string lastX = inputStr.substr(inputStr.length() - x, x);
   std::string formedString = firstX + lastX;
   return isPalindrome(formedString);
}
int main() {
   std::string inputStr = "helloolleh";
   int x = 5;
   std::cout << "Input string: " << inputStr << std::endl;
   std::cout << "Checking if the string formed by the first and last " << x << " characters is a palindrome..." << std::endl;
   bool isPalindromeFormed = checkPalindromeFormation(inputStr, x);
   if (isPalindromeFormed) {
      std::cout << "The formed string is a palindrome." << std::endl;
   } else {
      std::cout << "The formed string is not a palindrome." << std::endl;
   }
   return 0;
}

輸出

Input string: helloolleh
Checking if the string formed by the first and last 5 characters is a 
palindrome...
The formed string is a palindrome.

結論

總而言之,我們已經解決了檢查由給定字串的前 X 個字元和後 X 個字元組合而成的字串是否為迴文的問題。透過利用 C++ 程式語言的強大功能,我們已經開發了一個高效處理此任務的解決方案。透過實現字串操作技術和簡單的迴文檢查演算法,我們提供了一種可靠且準確的方法來確定結果字串的迴文屬性。本教程是一個全面的指南,提供了對問題陳述、分步解決方法和底層 C++ 實現的見解。透過理解和應用此處介紹的概念,讀者可以在自己的專案中有效地處理涉及字串操作和迴文驗證的類似挑戰。

更新於:2023年9月8日

83 次瀏覽

開始您的職業生涯

完成課程獲得認證

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