题目

描述

  • 给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。

方法一

思路

  • 回文字符串的特点为str[i] = str[length-i];所以判断一个字符串是否为回文字符串只需将原字符串反转得到字符串new_str,再与str比较,相同则为回文字符串,不相同则不为回文。

具体步骤

  • 代码如下:
    import java.util.*;
    public class Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 
    * @param str string字符串 待判断的字符串
    * @return bool布尔型
    */
    public boolean judge (String str) {
       // 先反转,再比较
       StringBuilder sb = new StringBuilder(str);
       sb = sb.reverse();
       if (sb.toString().equals(str)){
           return true;
       }
       return false;
    }
    }
  • 时间复杂度:,反转需要;
  • 空间复杂度:,创建了新的字符串。

    方法二

    思路

  • 方法一直接将字符串反转得到新的字符串进行比较,需要的辅助空间,可以考虑使用双指针,首尾比较,不同则不为回文。

    具体步骤

  • 参考下图栗子:
    图片说明
  • 代码如下:
    import java.util.*;
    public class Solution {
      /**
       * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
       * 
       * @param str string字符串 待判断的字符串
       * @return bool布尔型
       */
      public boolean judge (String str) {
          // 对半平分,首尾比较
          int i = 0;
          int j = str.length()-1;
          while(i<j){
              if (str.charAt(i) != str.charAt(j)){
                  return false;
              }
              ++i;
              --j;
          }
          return true;
      }
    }
  • 时间复杂度:,实际上只遍历了n/2次;
  • 空间复杂度:,常数级空间复杂度。