黑马程序员技术交流社区

标题: 自写的《判断是否为对称字符串》感觉太杂了,大牛来吧 [打印本页]

作者: lzh2015    时间: 2015-5-10 15:03
标题: 自写的《判断是否为对称字符串》感觉太杂了,大牛来吧
  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. }
复制代码



作者: fantacyleo    时间: 2015-5-10 15:42
对长度为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;
复制代码

作者: 大西洋    时间: 2015-5-10 20:07
学习!
第一次看到 a: while(true)  这样的写法,break a 就退出了循环~

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

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


作者: thoris    时间: 2015-5-10 22:57
不是把字符串reverse一下  和原来equals一下就可以了么
作者: 0416-孙磊    时间: 2015-5-10 23:41
我只能说牛,
作者: 大西洋    时间: 2015-5-11 14:00
thoris 发表于 2015-5-10 22:57
不是把字符串reverse一下  和原来equals一下就可以了么

是不是用StringBuffer的reverse??
这个想法也很牛!简单易行;
我当时做的时候用的是判断首尾和中间是否相等。。。看来想多了。。。
作者: 1017161726    时间: 2015-5-11 18:39
用StringBuilder.反转再equal是,很方便。不需要你这么麻烦的。前几天有个活动里有这一题

作者: JARVIS_YJ    时间: 2015-5-11 18:49
thoris 发表于 2015-5-10 22:57
不是把字符串reverse一下  和原来equals一下就可以了么

牛X....好睿智
作者: 代码搬运1号    时间: 2015-5-11 23:01
赞一个!!!!!!
作者: wkz_crystal    时间: 2015-5-11 23:13
最简单的思想就是把原字符串逆转得到新的字符串,新字符串和原来的字符串内容一样,就说明是对称的,不是一致的,就不是对应的字符串




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2