# NC141.判断是否为回文字符串

TIP

标签:字符串

# 描述

给定一个字符串,请你编写一个函数判断该字符串是否是回文串,如果回文

示例1

输入:"absba"
返回值:true
1
2

示例2

输入:"ranko"
返回值:false
1
2

# 算法思路

这道题目使用双指针的思路,左边指针指向字符串的第一个元素,右边指针指向字符串最后一个元素,然后依次比较左右指针所在位置元素的值是否相等,如果相同,就移动两个指针,继续比较,直到退出循环。

这里有一个细节需要说明,就是循环的条件,这里我们使用 left < right, 回文字符串的长度分为两种情况,一种是偶数,一种是奇数,如果是偶数,恰好是回文串,那么在在结束循环的时候,左右指针刚好扫过所有的字符,如果是奇数,在left移动和右指针移动后,已经不再满足循环条件了,但是剩下的只是一个字符,并不影响最终的结果。这点需要特别注意:

字符串个数是偶数情况:

0  1  2  3  4  5
a  b  s  s  b  a
1
2

字符串个数是奇数个情况:

0  1  2  3  4
a  b  s  b  a
1
2
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param str string字符串 待判断的字符串
 * @return bool布尔型
 */
function judge( str ) {
  // 我的想法就是使用双指针
  if(str.length === 0) {
    return true
  }
  let left = 0;
  let right = str.length-1;
  while(left < right) {
    if(str.charAt(left) === str.charAt(right)) {
      left++;
      right--;
    }else {
      return false
    }
  }
  return true
}
module.exports = {
  judge : judge
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
最后更新时间: 3/23/2024, 9:38:25 AM