黑马程序员技术交流社区

标题: 判断一个字符串是否是对称字符串 [打印本页]

作者: 闭眼就天黑    时间: 2013-12-18 23:05
标题: 判断一个字符串是否是对称字符串
例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串。。
{:soso_e109:}求大神,给个思路。最好给个参考代码。。{:soso_e115:}


作者: 闺蜜配男友‘好    时间: 2013-12-18 23:14
我也不懂呀   我是新手!!
作者: 闭眼就天黑    时间: 2013-12-18 23:17
闺蜜配男友‘好 发表于 2013-12-18 23:14
我也不懂呀   我是新手!!

好吧,,继续等:hug:
作者: lyn    时间: 2013-12-18 23:28
  1. public class Demo {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String str = null;      
  5.   
  6.         // 偶数长度  
  7.         str = "abccba";  
  8.         System.out.println(str + "-----" + puanduan(str));  
  9.   
  10.         // 奇数长度  
  11.         str = "abcdcba";  
  12.         System.out.println(str + "-----" + puanduan(str));  
  13.   

  14.         str = "abca";  
  15.         System.out.println(str + "-----" + puanduan(str));  
  16.     }  
  17.   
  18.     public static boolean puanduan(String str) {  
  19.         if (null == str) {  
  20.             return false;  
  21.         }  
  22.         for (int i = 0; i < str.length() / 2; i++) {  
  23.             // 比较距字符串两头长度相同的字符是否一样  
  24.             if (str.charAt(i) != str.charAt(str.length() - i - 1)) {  
  25.                 return false;  
  26.             }  
  27.         }  
  28.         return true;  
  29.     }  
  30. }
复制代码

作者: ~IN_HAND~    时间: 2013-12-18 23:33
  1. import java.util.*;
  2. class TestDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner sc = new Scanner(System.in);
  7.                 String s = sc.nextLine();
  8.                 int len = s.length();
  9.                 String s1 = s.substring(0,len/2);
  10.                 String s2 = s.substring(len/2+(len%2==1?1:0),len);
  11.                 if(s1.equals(new String(new StringBuilder(s2).reverse())))
  12.                         System.out.println("对称");
  13.                 else
  14.                         System.out.println("不对称");
  15.         }
  16. }
复制代码

作者: 夏德宇    时间: 2013-12-18 23:35
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 //初始化扫描器,提示输入,接收输入
  4.                 java.util.Scanner input = new java.util.Scanner(System.in);
  5.                 System.out.print("在此输入 --> ");
  6.                 String str = input.next();
  7.                
  8.                 //得到字符串长度
  9.                 int length = str.length();
  10.                 //定义变量,记录对称位置字符相同的情况
  11.                 int flag = 0;
  12.                 //循环判断对称位置字符是否相同,并用flag记录
  13.                 for(int i = 0; i < length / 2; i ++){
  14.                         if(str.charAt(i) == str.charAt(length - 1 - i))
  15.                                 flag ++ ;
  16.                 }
  17.                 //判断flag与(length/2)的关系得到结果 并打印
  18.                 if(flag == length / 2){
  19.                         System.out.println("是对称字符串");
  20.                 } else {
  21.                         System.out.println("不是对称字符串");
  22.                 }
  23.         }
  24. }
复制代码

供参考,可以复制过去直接运行试试
作者: litaojisuanji    时间: 2013-12-18 23:49
思路:
    1,创建两个变量,x,y,分别赋初值,x=0;y=s.leng()-1;(这里的s指的就是要比的字符串)
    2,分别获取x,y索引的字符串可以用charAt方法,不懂去查API吧
    3,再把获取的值进行比较,如果不同可以break;相同则x++;y++;再获取索引比较,
    4,很明显这是一个循环,那么循环条件是什么呢,x一直加,y一直加,错过那就不用比较的了,那么这个条件可以是(x<y),符合就继续比,不符合就退出
    5,退出再判断x是否大于y,如果不大于说明是break退出的,刚返回false,如果大于说明比完退出的,则返回true

思路告诉你了,接下来就看你的了,加油吧!
作者: 衣带赞    时间: 2013-12-19 00:13
本帖最后由 衣带赞 于 2013-12-19 00:16 编辑

这个还需要思路吗?将字符串反过来和原字符串比较,是一样就是反转,不是一样的就不是反转。
代码最简单的方式一句就可以搞定:
new StringBuilder(s).reverse().toString().equals(s);   // s 就是你要比较的字符串
返回true就是的,返回false就不是的,注意输入的字符串不能为null,会出现异常。
作者: 闭眼就天黑    时间: 2013-12-19 16:22
衣带赞 发表于 2013-12-19 00:13
这个还需要思路吗?将字符串反过来和原字符串比较,是一样就是反转,不是一样的就不是反转。
代码最简单的方 ...

:L才发现是字符串反转可以比较。。。因为对称,所以反转应该也是一样的




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