Angular学习笔记78:使用栈来处理字符串是否是回文问题

使用"栈"判断一个字符串是否是回文。回文是指正序(从左向右)和倒序(从右向左)读都是一样的。

大概思路:将字符串的每一个字符进栈,然后在出栈,这个时候出栈以后的字符串顺序刚好和原字符串顺序相反,当出栈后的字符串和原字符串相等,那么这个字符串为回文。

根据思路写方法

// 测试字符串时候是回文
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'));

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9MMBCzq-1573634870960)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p889)]

附另一种方法

// 测试字符串时候是回文
  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;
  }

这里是将字符串根据长度进行折半处理,然后比较第一个元素和最后一个元素是否相等,第二个和倒数第二个对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值