搜索
查看: 1162|回复: 7
打印 上一主题 下一主题

解密回文 栈,有点看不懂,请高手解惑

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-17 10:59:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用栈解密回文那一节,为什么求栈的中心点是mid=strlen(a)/2-1,如果回文是ahaha,那strlen求长度不是5吗,mid=5/2--1的值就是1了,a[mid]怎么会是栈的中心点呢?求高手大大知道的花点时间讲解下........不太懂
沙发
发表于 2014-9-17 12:31:12 | 只看该作者
因为“中心点”这个用词不正确

如果字符串长度是奇数,那么中心点是不用判断的,只用判断中心点两边的是否匹配
ahaha这个字符串就是把a h 两个字符入栈,然后从字符串的第四个字符开始验证匹配的
下面有这么一段代码
  1. if(len%2==0)
  2.         next=mid+1;
  3.     else
  4.         next=mid+2;
复制代码
板凳
 楼主| 发表于 2014-9-17 12:54:51 | 只看该作者
原来这样啊,涨姿势了!万分感谢
地板
发表于 2014-10-14 12:20:58 来自手机 | 只看该作者
那个2-1是因为字符数组是从0下标开始的吧?所以是0 1
2 3 4 五个空间以len=5为例,5/2等于2,是字符串的正中心,-1是为了让它指向最先入栈的数,对吗?
来自: 微社区
5#
发表于 2014-10-14 12:29:48 来自手机 | 只看该作者
如果从top等于0的时候就开始使用top的值然后再加加就不用len-1了吧?
来自: 微社区
6#
发表于 2014-10-14 13:56:56 | 只看该作者
好吧我举例子仔细解释一遍:
对于长度为奇数的字符串,例如ahaha
strlen("ahaha")得到5,5 / 2的得到2,2 - 1得到1,入栈的数据是 a h
中间点的那个a在判断对称性时候是不需要的,要进行匹配的位置从第二个h开始,mid是第一个h的位置,要跳过中心那个a,所以往后移动两位,总结一下就是
len -> 5
mid -> len / 2 - 1 -> 第一个h的位置
next -> mid + 2 -> 第二个h的位置
7#
发表于 2014-10-15 20:57:27 | 只看该作者
理解了。谢谢大神
8#
发表于 2014-12-24 23:01:41 | 只看该作者
懂了,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表