第3章-21 判断回文字符串 (15 分)

题目要求

输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。

输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:

输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No

输入样例1:

level

输出样例1:

level
Yes

输入样例2:

1 + 2 = 2 + 1 =

输出样例2:

1 + 2 = 2 + 1 =
No

代码+注释

s=input()#输入
res='No'#将res初始化为No
t=s#保存原来的字符串
s=list(s)#将字符串转换为序列
s.reverse()#倒置
s=''.join(s)#将倒置后的序列聚合为字符串
print(t)#输出原字符串
#若原字符串和倒置后的字符串相等,则将Yes赋值给res
if(s==t):
    res='Yes'
print(res)#输出

代码结果

在这里插入图片描述

总结

数据处理步骤:
1.保存原字符串,因为无论是否回文,都要输出原字符串的
2.将字符串倒置与原字符串进行比较,若相等则为Yes
关键在于字符串的倒置,我采用了列表的reverse()方法,所以需要先将字符串转换为列表,倒置后再转换为字符串

题外话

方法可能略显繁琐,但我感觉比较直观,也是我第一时间想到的,我相信大多数人想到回文也应该是先把它倒过来,然后与原来的比较,当然这不考虑时间和空间复杂度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以这样写:public class Palindrome { public static boolean isPalindrome(String str) { int i = 0; int j = str.length() - 1; while (i < j) { if (str.charAt(i) != str.charAt(j)) { return false; } i++; j--; } return true; } public static void main(String[] args) { String str1 = "山西运煤车煤运西山"; System.out.println(isPalindrome(str1)); } } ### 回答2: 可以使用以下的Java程序来判断一个字符串是否是回文字符串: ```java import java.util.Scanner; public class Palindrome { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str = scanner.nextLine(); if (isPalindrome(str)) { System.out.println(str + " 是一个回文字符串。"); } else { System.out.println(str + " 不是一个回文字符串。"); } } public static boolean isPalindrome(String str) { int left = 0; int right = str.length() - 1; while (left < right) { if (str.charAt(left) != str.charAt(right)) { return false; } left++; right--; } return true; } } ``` 这个程序通过一个`isPalindrome`方法来判断一个字符串是否是回文字符串。它使用两个指针`left`和`right`,初始时别指向字符串的第一个字符和最后一个字符。在每一步循环中,它比较`left`和`right`所指向的字符是否相等,如果不相等就返回`false`,表示该字符串不是回文字符串。如果循环结束后都没有返回`false`,则表示该字符串回文字符串,返回`true`。在`main`方法中,它首先获取用户输入的字符串,然后调用`isPalindrome`方法进行判断,最后输出相应的结果。 ### 回答3: 判断回文字符串的程序可以通过以下Java代码实现: ```java import java.util.Scanner; public class PalindromeCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个字符串:"); String input = scanner.nextLine(); if (isPalindrome(input)) { System.out.println("是回文字符串"); } else { System.out.println("不是回文字符串"); } } public static boolean isPalindrome(String str) { // 去除字符串中的空格和标点符号,并转换为全部小写 String formattedStr = str.replaceAll("[^a-zA-Z0-9]", "").toLowerCase(); // 使用双指针法判断是否为回文字符串 int left = 0; int right = formattedStr.length() - 1; while (left < right) { if (formattedStr.charAt(left) != formattedStr.charAt(right)) { return false; } left++; right--; } return true; } } ``` 该程序先要求用户输入一个字符串,然后调用`isPalindrome`方法判断输入的字符串是否为回文字符串。`isPalindrome`方法会做以下几个步骤: 1. 首先使用正则表达式将字符串中的非字母、非数字字符去除,并将字符串转换为全部小写。这是因为回文字符串不区大小写,且忽略空格和标点符号。 2. 接下来使用双指针法判断是否为回文字符串。定义一个左指针和一个右指针,初始别指向字符串的首尾位置。如果左指针所指的字符不等于右指针所指的字符,则不是回文字符串,返回`false`;如果指针所指的字符相等,则继续将左指针向右移动,右指针向左移动,继续比较。直到左指针大于等于右指针时停止循环。 3. 如果循环结束,即左指针大于等于右指针,说明字符串回文字符串,返回`true`;否则返回`false`。 最后,根据返回的判断值,输出相应的结果,即输入的字符串回文字符串还是不是回文字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值