回文字符串

回文字符串

什么是回文字符串

回文字符串:是一个正读和反读都一样的字符串。

判断回文字符串的方法

双指针法

这是最直观的方法。我们可以设置两个指针,一个从字符串的开始位置开始,一个从字符串的结束位置开始,然后同时向中间移动。在移动的过程中,如果两个指针指向的字符不相等,那么这个字符串就不是回文字符串。如果两个指针都移动到了中间位置,那么这个字符串就是回文字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let str = 'abba';
let str2 = 'abdc';

function isPalindrome(s) {
let left = 0,right = s.length-1
while(left<right){
if(s[left] != s[right]){
return false
}
left++
right--
}
return true
}

console.log(isPalindrome(str)) // true
console.log(isPalindrome(str2)) // false

反转字符串

我们可以将字符串反转,然后比较反转后的字符串和原字符串是否相等。如果相等,那么这个字符串就是回文字符串。

1
2
3
4
5
6
7
8
9
10
let str = 'abba';
let str2 = 'abdc';

function isPalindrome(s) {
// 反转字符串
let reverseStr = s.split('').reverse().join('')
return s === reverseStr
}
console.log(isPalindrome(str)) // true
console.log(isPalindrome(str2)) // false

递归

我们可以递归地判断一个字符串是否为回文字符串。如果字符串的首字符和尾字符相等,并且去掉首字符和尾字符后的字符串仍然是回文字符串,那么这个字符串就是回文字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let str = 'abba';
let str2 = 'abdc';

function isPalindrome(s) {
if (s.length <= 1) {
return true;
}
if (s[0] !== s[s.length - 1]) {
return false;
}
return isPalindrome(s.slice(1, s.length - 1));
}

console.log(isPalindrome(str)) // true
console.log(isPalindrome(str2)) // false