详解算法:判断输入的字符串是否对称

package com.ag;

import java.util.*;

/**
 *判断输入的字符串是否对称
 * eg:
 *   input:1234321或123321或abcba或abba out: true
 *  input:1234567或123123或abcab或abab out: false
 */
public class StrSymmetrical {

   /**
     * 思路:字符串前半部分(left)与后半部分(right)翻转之后比较是否相等
     * @param str
     * @return
     */
    public static  boolean isStrSymmetrical(String str){
        if(str==null||str.length()<=1){
            return false;
        }

        //1.获取字符串前后两部分
        int leftIndex=str.length()/2;
        String left=str.substring(0,leftIndex);
        String right;
        if(str.length()%2==0){
            right=str.substring(leftIndex,str.length());
        }else{
            right=str.substring(leftIndex+1,str.length());
        }

        //2.翻转字符串后半部分
        StringBuilder sb=new StringBuilder(right);
        String reverseRight=sb.reverse().toString();
        
        //3.left前半部分与right后半部分翻转字符串比较
        if(left.equals(reverseRight)){
            return true;
        }
        return false;
    }

	/**
     * 思路:原始字符串str与newStr(str字符串翻转之后)比较是否相等
     * @param str
     * @return
     */
    public static  boolean isStrSymmetrical2(String str) {
        if (str == null || str.length() <= 1) {
            return false;
        }
        
        StringBuilder sb=new StringBuilder(str);
        String newStr=sb.reverse().toString();
        if(str.equals(newStr)){
            return true;
        }
        return false;
    }
        public static void main(String[] args) {
        //方法1
        System.out.println("1234321:"+isStrSymmetrical("1234321"));
        System.out.println("123321:"+isStrSymmetrical("123321"));
        System.out.println("abcba:"+isStrSymmetrical("abcba"));

        System.out.println("1234567:"+isStrSymmetrical("1234567"));
        System.out.println("123123:"+isStrSymmetrical("123123"));
        System.out.println("abcab:"+isStrSymmetrical("abcab"));
        System.out.println("abab:"+isStrSymmetrical("abab"));

        System.out.println("a :"+isStrSymmetrical("a"));

            System.out.println("=======================================");

           //方法2
            System.out.println("1234321:"+isStrSymmetrical2("1234321"));
            System.out.println("123321:"+isStrSymmetrical2("123321"));
            System.out.println("abcba:"+isStrSymmetrical2("abcba"));

            System.out.println("1234567:"+isStrSymmetrical2("1234567"));
            System.out.println("123123:"+isStrSymmetrical2("123123"));
            System.out.println("abcab:"+isStrSymmetrical2("abcab"));
            System.out.println("abab:"+isStrSymmetrical2("abab"));

            System.out.println("a :"+isStrSymmetrical2("a"));


            System.out.println("isStrSymmetrical2:"+isStrSymmetrical2("1234211"));
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值