pta7-2 判断回文 (10 分)
时间: 2023-05-31 15:18:53 浏览: 323
PTA 7-29 删除字符串中的子串
### 回答1:
题目描述:
给定一个长度不超过100的字符串,判断它是否是回文。
输入格式:
一个字符串,长度不超过100。
输出格式:
如果是回文,输出“YES”,否则输出“NO”。
样例输入:
abcdcba
样例输出:
YES
解题思路:
回文字符串的特点是正着读和倒着读都一样,因此我们可以将字符串反转后再和原字符串比较,如果相同则说明是回文字符串。
具体实现可以使用字符串的反转函数reverse(),也可以手动实现反转。
代码实现:
### 回答2:
回文是指正读和反读相同的字符序列,例如“12321”、“level”等等。在这道题目中,我们需要判断给定的字符串是否是回文。
要判断一个字符串是否是回文,我们可以使用双指针法。首先,让左右两个指针分别指向字符串的首尾。每次比较两个指针所指向的字符是否相同,如果相同,就将左指针指向下一个字符,右指针指向前一个字符,继续比较;如果不同,直接判断该字符串不是回文。
具体实现过程如下:
```
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string s) {
int left = 0, right = s.size() - 1;
while (left < right) { // 只需要比较一半即可
if (s[left] != s[right]) {
return false;
}
left++;
right--;
}
return true;
}
int main() {
string s;
cin >> s;
if (isPalindrome(s)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
在上述代码中,我们首先定义了一个函数`isPalindrome`,用于判断一个字符串是否是回文。该函数首先将左右两个指针分别指向字符串的首尾,在接下来的循环中,只需要比较一半即可。每次比较两个指针所指向的字符是否相同,如果相同,就将左指针指向下一个字符,右指针指向前一个字符,继续比较;如果不同,直接判断该字符串不是回文。
最后,在主函数中读入字符串并调用`isPalindrome`函数进行判断即可。如果该字符串是回文,输出"Yes",否则输出"No"。
综上所述,本题主要考察了双指针算法的应用。通过双指针的比较,可以快速判断一个字符串是否是回文。这种算法的时间复杂度为$O(n)$,具有很高的效率。
### 回答3:
本题要求编写程序判断给定的整数是否是回文数,即正着读和倒着读都一样的整数。
首先,我们需要明确回文数的定义,即将一个整数反转后得到的整数与原来的整数相等,该整数即为回文数。
因此,我们可以编写一个函数,将给定的整数进行反转,然后将反转后的整数与原来的整数进行比较,若相等即为回文数,否则不是回文数。
具体实现时,我们可以使用循环将整数的各位数依次取出并存储到一个新的整数中,则得到的新整数就是原整数的翻转。在每一次循环中,将原整数对10取模得到该位数的值,并将其加到新整数的末尾,然后将原整数除以10向下取整,再继续迭代直至原整数变为0。
最后,再将反转后的整数与原整数进行比较即可,若相等则是回文数,否则不是回文数。
示例代码如下:
```
#include <iostream>
using namespace std;
int main() {
int num, rev_num = 0, temp;
cin >> num; // 输入待判断的整数
temp = num;
while (temp > 0) {
rev_num = rev_num * 10 + temp % 10; // 反转整数
temp /= 10;
}
if (rev_num == num) { // 判断是否为回文数
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
需要注意的是,在输入数字的时候,如果数字中有前导零,则我们需要特别处理这种情况,即将其去掉再进行判断,否则可能会得到错误的结果。另外,我们还需要考虑负数的情况,若待判断的整数为负数,则不能直接判断是否为回文数,需要先将其转为正数再进行判断。
阅读全文