C++での回文判定方法


方法1: 反転して比較する 回文判定の一番簡単な方法は、文字列を反転させて元の文字列と比較することです。以下はこの方法のコード例です。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str) {
    std::string reversed = str;
    std::reverse(reversed.begin(), reversed.end());
    return str == reversed;
}
int main() {
    std::string input;
    std::cout << "文字列を入力してください: ";
    std::cin >> input;

    if (isPalindrome(input)) {
        std::cout << "回文です" << std::endl;
    } else {
        std::cout << "回文ではありません" << std::endl;
    }

    return 0;
}

このコードでは、isPalindrome関数が与えられた文字列を反転させ、元の文字列と比較します。回文であればtrueを返し、そうでなければfalseを返します。

方法2: 両端から文字を比較する 文字列の両端から順に文字を比較していく方法もあります。以下はこの方法のコード例です。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str) {
    int left = 0;
    int right = str.length() - 1;

    while (left < right) {
        if (str[left] != str[right]) {
            return false;
        }
        left++;
        right--;
    }

    return true;
}
int main() {
    std::string input;
    std::cout << "文字列を入力してください: ";
    std::cin >> input;

    if (isPalindrome(input)) {
        std::cout << "回文です" << std::endl;
    } else {
        std::cout << "回文ではありません" << std::endl;
    }

    return 0;
}

このコードでは、isPalindrome関数が文字列の両端から文字を比較していきます。もし文字が異なればfalseを返し、最後まで比較が進んだ場合はtrueを返します。

これらの方法は、文字列の長さがNの場合、時間計算量はO(N)です。また、追加のメモリを使用せずに回文を判定できます。

以上がC++で回文を判定するいくつかの方法とコード例です。ご参考までにお使いください。