Aha! Algorithms - Stack

《啊哈!算法》第 2 章第 2 节,栈的 Swift 实现。

问题

判断字符串是否回文

解决

将字符串前半部分入栈,然后依次出栈,与后半部分字符一一比对。

var stk = ""
let str = "xybyx"
let len = str.characters.count
let mid = len / 2 - 1 //字符串中点索引值

var next: Int

var top = 0 //栈的初始化,0表示栈中为空

//将 mid 前的字符依次入栈
for i in 0...mid {
    let c = str[str.index(str.startIndex, offsetBy: i)]
    stk = stk + String(c)
    top += 1 //每添加一个字符串 top + 1
}
print("\(stk)")

//判断字符串长度是奇数还是偶数,找出mid之后进行匹配的起始索引值
next = (len % 2 == 0) ? mid + 1 : mid + 2

//依次出栈,逐一对比 mid 后的字符
for i in next...(len - 1) {
    let s = stk[stk.index(stk.startIndex, offsetBy: top-1)]
    let a = str[str.index(str.startIndex, offsetBy: i)]
    print("s:\(s), a:\(a)")
    if s != a {
        break
    }
    top -= 1
}

//如果 top 为 0 说明栈内所有字符都被一一匹配了
print("\(top==0)")

代码在 GitHub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,389评论 0 19
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 韩信找到赵云的时候,后者背对他坐在尸堆上,盔甲残败血迹遍身,撑着长枪呆愣着不知在想些什么。 他张张嘴没等出声,赵云...
    拙生九歌阅读 3,689评论 0 4
  • ——关键是读过书你学到了什么,是否30分钟读完不重要 BY刘安娜160718 有小伙伴在群里问为什么要做笔记,说读...
    进击的刘安娜阅读 4,774评论 8 55
  • 有多少人为了眼前放弃自己的明天 有多少人为了明天又在扼杀今天 有多少人为了今天寄生给了欺骗 有多少人欺骗只为了换取...
    常袖阅读 289评论 0 0