# NC141.判断是否为回文字符串
TIP
标签:字符串
# 描述
给定一个字符串,请你编写一个函数判断该字符串是否是回文串,如果回文
示例1
输入:"absba"
返回值:true
1
2
2
示例2
输入:"ranko"
返回值:false
1
2
2
# 算法思路
这道题目使用双指针的思路,左边指针指向字符串的第一个元素,右边指针指向字符串最后一个元素,然后依次比较左右指针所在位置元素的值是否相等,如果相同,就移动两个指针,继续比较,直到退出循环。
这里有一个细节需要说明,就是循环的条件,这里我们使用 left < right
, 回文字符串的长度分为两种情况,一种是偶数,一种是奇数,如果是偶数,恰好是回文串,那么在在结束循环的时候,左右指针刚好扫过所有的字符,如果是奇数,在left移动和右指针移动后,已经不再满足循环条件了,但是剩下的只是一个字符,并不影响最终的结果。这点需要特别注意:
字符串个数是偶数情况:
0 1 2 3 4 5
a b s s b a
1
2
2
字符串个数是奇数个情况:
0 1 2 3 4
a b s b a
1
2
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
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