啊哈算法之巧用栈解密回文字符串
简述 本算法摘选自啊哈磊所著的《啊哈!算法》第二章第二节的题目――使用栈来解密回文。文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,意在深刻理解栈这一数据结构的特性和操作方法,并希望能够在这种数据结构的帮助之下,解决其他的类似的能够用栈来解决的问题。(哈哈,偷懒了,引用了上一篇博文的简述) 算法题目 回文字符串就是正读反读均相同的字符串序列,比如“xyzyx”、“aha”、"ahaha"和“121”等等,现在要求你使用算法来判断给定一个字符串是否是回文字符串。 解题思路 如果一个字符串是回文的话,那么它肯定是中间对称的,只需要将中间点以前的字符串反过来与中间点后面的字符串一一比较,如果都相等,那么就是回文字符串了,那么如何能够将中间点前面的字符串依次读入然后再反过来读出呢,这个时候栈就上场了。 栈是一种后进先出的数据结构,只能在一端进行插入和删除操作,就如同手枪弹夹一样,装子弹的时候总是在弹夹的异端塞入,而且最后装入的那发子弹会最先打出,最先装入的字段成了最后一发,弹夹的结构就类似于栈的原理结构。把回文字符串顺着放进栈中,能够倒着顺序取出来,这刚好就满足了我们的需求,栈的实现也很简单,只需要一个一维数组和一个指向栈顶的指针(变量)top,我们在插入或者删除栈中数据时移动top指针就行了,这样我们就能很容易的接用栈这种数据结构来判断字符串是否是回文了