判断回文数列

文章介绍了两种方法判断字符串是否为回文,原方法通过字符数组比较,简化版通过两个指针从两端向中间移动对比字符。展示了Java编程中字符串处理的一个实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这么长,这么复杂,而且到最后还没写对。

public class Demo {

  // 判断是否为回文字符串
  public static boolean isPalindrome(String content) {
    int length=content.length();
    char[] chars=new  char[length];             //创建一个跟字符串一样长的数组,将字符串分成每一个字符存储到里面

    int  right=length-1;
    int q=0;
    int w=0;
    //先判断长度是奇数还是偶数
    if(length%2==0){              //说明是偶数
      int middle=length/2;
      char[] charsLeft=new  char[middle];
      char[] charsRight=new  char[middle];

      for (int i = 0; i < middle; i++) {                      //以中间那个字符为界限,分别将字符串左边和右边的字符存入到不同数组中
        charsLeft[i]=chars[i];
      }
      for (int j =right; j >=middle+1; j--) {
        charsRight[q]=chars[j];
        q++;
      }

      for (int p = 0; p <charsLeft.length ; p++) {                      //判断两个字符数组是否相同
        if(charsLeft[p]==charsRight[p]){
          System.out.println("第"+p+charsLeft[p]+charsRight[p]+"个相同");
        }else{
          return false;
        }

      }


    }else {                       //说明是奇数
      int middle=(length-1)/2;
      char[] charsLeft=new  char[middle];
      char[] charsRight=new  char[middle];

      for (int i = 0; i < middle; i++) {                      //以中间那个字符为界限,分别将字符串左边和右边的字符存入到不同数组中
        charsLeft[i]=chars[i];
      }
      for (int j =right; j >=middle+1; j--) {

        charsRight[w]=chars[j];
        w++;
      }
      for (int p = 0; p <charsLeft.length ; p++) {                      //判断两个字符数组是否相同
        if(charsLeft[p]==charsRight[p]){
          System.out.println("第"+p+charsLeft[p]+charsRight[p]+"个相同");
        }else{
          return false;
        }

      }


    }

    return true;
  }

  public static void main(String[] args) {
    System.out.println(isPalindrome("洞帘水挂水帘洞"));
    System.out.println(isPalindrome("上海自来水来自海上"));
    System.out.println(isPalindrome("maddam"));
    System.out.println(isPalindrome("m"));
    System.out.println(isPalindrome("maxcam"));
  }
}

简单写法

public class Demo {

  // 判断是否为回文字符串
  public static boolean isPalindrome(String content) {
    // 开始和结尾开始,依次往中间推进
    int start = 0;
    int end = content.length() - 1;
    while (start < end) {
      // 一旦出现不同的字符,则返回错误
      if (content.charAt(start) != content.charAt(end)) {
        return false;
      }
      start++;
      end--;
    }
    return true;
  }

 public static void main(String[] args) {
    System.out.println(isPalindrome("洞帘水挂水帘洞"));
    System.out.println(isPalindrome("上海自来水来自海上"));
    System.out.println(isPalindrome("maddam"));
    System.out.println(isPalindrome("m"));
    System.out.println(isPalindrome("maxcam"));
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值