A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.Scanner;
  2. //注释的部分原来只能判输入断奇数位的,改进后奇数偶数的都可以判断了,不过感觉不够精炼
  3. public class ArrrayToll {
  4.         private static Scanner sc;

  5.         public static void main(String[] args) {
  6.                 sc = new Scanner(System.in);
  7.                 a: while (true) {
  8.                         System.out.println("请输入要检验的对称字符串字母,格式:abcde 无任何符号");
  9.                         String str = sc.nextLine();
  10.                         char[] ch = str.toCharArray();
  11.                         b: for (;;) {
  12.                                 for (int i = 0; i < ch.length; i++) {
  13.                                         int j = ch.length - 1 - i;
  14.                                         while (ch[i] != ch[j]) {
  15.                                                 System.out.println("您输入的字母串为 '非' 对称字母串");
  16.                                                 break b;
  17.                                         /*
  18.                                          * if (ch[i] != ch[j]) {
  19.                                          * System.out.println("您输入的字母串为 '非' 对称字母串"); break//原来for 那有个标记结束for,改进后去掉了 ;
  20.                                          * } else
  21.                                          * if (ch[i]==ch[j]&&i==j) {
  22.                                          * System.out.println("您输入的字母串为对称字母串"); break ; }
  23.                                          */

  24.                                         }
  25.                                 }
  26.                                 System.out.println("您输入的字母串为对称字母串");
  27.                                 break b;
  28.                         }
  29.                 }
  30.         }
  31. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

9 个回复

倒序浏览
对长度为n的字符串,依次判断下标为0和n-1的字符是否相同、下标为1和n-2的字符是否相同......直至判断下标为n/2 - 1和n/2 + 1的字符是否相同。此方法对n为奇偶都适用
  1. String s = "aabaa";
  2. int mid = s.length() / 2;
  3. for (int i = 0; i < mid; i++) {
  4.     if (s.charAt(i) != s.charAt(s.length() - 1 - i))
  5.         return false;
  6. }
  7. return true;
复制代码
回复 使用道具 举报 1 0
学习!
第一次看到 a: while(true)  这样的写法,break a 就退出了循环~

敢问大神,您是怎样想到这个对比算法的??求思路。

int j = ch.length - 1 - i ;  // 这句是什么含义呢?请指教,谢谢!

回复 使用道具 举报
不是把字符串reverse一下  和原来equals一下就可以了么
回复 使用道具 举报 2 0
我只能说牛,
回复 使用道具 举报
thoris 发表于 2015-5-10 22:57
不是把字符串reverse一下  和原来equals一下就可以了么

是不是用StringBuffer的reverse??
这个想法也很牛!简单易行;
我当时做的时候用的是判断首尾和中间是否相等。。。看来想多了。。。
回复 使用道具 举报
用StringBuilder.反转再equal是,很方便。不需要你这么麻烦的。前几天有个活动里有这一题
回复 使用道具 举报
thoris 发表于 2015-5-10 22:57
不是把字符串reverse一下  和原来equals一下就可以了么

牛X....好睿智
回复 使用道具 举报
赞一个!!!!!!
回复 使用道具 举报
最简单的思想就是把原字符串逆转得到新的字符串,新字符串和原来的字符串内容一样,就说明是对称的,不是一致的,就不是对应的字符串
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马