使用"栈"判断一个字符串是否是回文。回文是指正序(从左向右)和倒序(从右向左)读都是一样的。
大概思路:将字符串的每一个字符进栈,然后在出栈,这个时候出栈以后的字符串顺序刚好和原字符串顺序相反,当出栈后的字符串和原字符串相等,那么这个字符串为回文。
根据思路写方法
// 测试字符串时候是回文
public testIsPalindrome(str: string): boolean {
const strStack = new StackService();
for (const i of str) {
strStack.push(i);
}
let palindromeStr = '';
for (let i = strStack.length(); i > 0; i--) {
palindromeStr += strStack.pop();
}
return str === palindromeStr;
}
调用进行测试
console.log('hello is Palindrome ' + this.testIsPalindrome('hello'));
console.log('helleh is Palindrome ' + this.testIsPalindrome('helleh'));
结果如下:
附另一种方法
// 测试字符串时候是回文
public testIsPalindrome(str: string): boolean {
// const strStack = new StackService();
// for (const i of str) {
// strStack.push(i);
// }
// let palindromeStr = '';
// for (let i = strStack.length(); i > 0; i--) {
// palindromeStr += strStack.pop();
// }
// return str === palindromeStr;
const xArrLen = str.length;
for (let i = 0; i <= (xArrLen - xArrLen % 2 !== 0 ? 1 : 0) / 2; i++) {
if (str[i] !== str[xArrLen - i - 1]) {
return false;
}
}
return true;
}
这里是将字符串根据长度进行折半处理,然后比较第一个元素和最后一个元素是否相等,第二个和倒数第二个对比。