1.问题说明
? ? ? ? 输入一串字符串,判断器是否中心对称,如给定字符串'aabbccbbaa',则返回true,表示该字符串对称。
2.解决方法
? ? ? ? 对称的字符串不论是正序还是逆序输出都是一样的,因此很容易就能想到用栈的方法来解决。这里我们首先创建一个空栈,并获取字符串的长度,然后用循环遍历字符串,并将字符串长度除以2前面的字符串入栈,再对剩下一半的字符进行判断,如果遍历到与栈顶元素相等的字符,则出栈,直到遍历完字符串。如果最后栈空则表示该字符串对称,否则就不对称。
3.代码实现
bool isSymmetric(LiStack *s)
{
LiStack *p = s->next;
LiStack *s1;
InitStack(s1);
int count = 0;
int mid = StackLength(s)/2;
while (p != NULL)
{
if (count < mid)
{
Push(s1, p->data);
}
else
{
if (p->data == GetTop(s1))
{
Pop(s1);
}
}
count++;
p = p->next;
}
if (StackEmpty(s1))
{
return true;
}
else{return false;}
}
4.代码测试
g f e d c b a
该链表的所有字符中心不对称!
a b c c b a
该链表的所有字符中心对称!
a b c b a
该链表的所有字符中心对称!
|