C ++程序检查给定字符串是否为回文
给定一个由N个英文字符组成的字符串S ,任务是检查给定的字符串是否是回文。如果给定的字符串是回文,则打印“是”。否则,打印“否”。
注意:如果字符串的反转与字符串相同,则称字符串为回文。
例子:
Input: S = “ABCDCBA”
Output: Yes
Explanation:
The reverse of the given string is equal to the (ABCDCBA) which is equal to the given string. Therefore, the given string is palindrome.
Input: S = “GeeksforGeeks”
Output: No
Explanation:
The reverse of the given string is equal to the (skeeGrofskeeG) which is not equal to the given string. Therefore, the given string is not a palindrome.
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]上进行迭代,并在每次迭代中检查索引i和Ni-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)