📌  相关文章
📜  C ++程序检查给定字符串是否为回文

📅  最后修改于: 2022-05-13 01:57:06.743000             🧑  作者: Mango

C ++程序检查给定字符串是否为回文

给定一个由N个英文字符组成的字符串S ,任务是检查给定的字符串是否是回文。如果给定的字符串是回文,则打印“”。否则,打印“”。

注意:如果字符串的反转与字符串相同,则称字符串为回文。

例子:

Naive Approach:在 STL 中使用内置反向函数的最简单方法。请按照以下步骤解决问题:

  • 将字符串S复制到另一个字符串,比如P,然后反转字符串S。
  • 现在检查字符串S 是否等于字符串P ,然后打印“ Yes ”。否则,打印“”。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to check whether
// the string is palindrome
string isPalindrome(string S)
{
    // Stores the reverse of the
    // string S
    string P = S;
 
    // Reverse the string P
    reverse(P.begin(), P.end());
 
    // If S is equal to P
    if (S == P) {
        // Return "Yes"
        return "Yes";
    }
    // Otherwise
    else {
        // return "No"
        return "No";
    }
}
 
// Driver Code
int main()
{
    string S = "ABCDCBA";
    cout << isPalindrome(S);
 
    return 0;
}


C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to check whether string
// is palindrome
string isPalindrome(string S)
{
    // Iterate over the range [0, N/2]
    for (int i = 0; i < S.length() / 2; i++) {
 
        // If S[i] is not equal to
        // the S[N-i-1]
        if (S[i] != S[S.length() - i - 1]) {
            // Return No
            return "No";
        }
    }
    // Return "Yes"
    return "Yes";
}
 
// Driver Code
int main()
{
    string S = "ABCDCBA";
    cout << isPalindrome(S);
 
    return 0;
}


输出
Yes

时间复杂度: O(N)
辅助空间: O(N)

高效方法:上述方法可以在空间复杂度上字符优化,方法是遍历字符串,对字符[0, N / 2] 。请按照以下步骤解决问题:

  • 使用变量i在范围[0, N/2]上进行迭代,并在每次迭代中检查索引iNi-1处的字符是否不相等,然后打印“ No ”并中断。
  • 如果上述情况都不满足,则打印“”。

下面是上述方法的实现:

C++

// C++ program for the above approach
#include 
using namespace std;
 
// Function to check whether string
// is palindrome
string isPalindrome(string S)
{
    // Iterate over the range [0, N/2]
    for (int i = 0; i < S.length() / 2; i++) {
 
        // If S[i] is not equal to
        // the S[N-i-1]
        if (S[i] != S[S.length() - i - 1]) {
            // Return No
            return "No";
        }
    }
    // Return "Yes"
    return "Yes";
}
 
// Driver Code
int main()
{
    string S = "ABCDCBA";
    cout << isPalindrome(S);
 
    return 0;
}
输出:
Yes

时间复杂度: O(N)
辅助空间: O(1)