public class Solution {
    Stack<char> S = new Stack<char>();
        Queue<char> Q = new Queue<char>();
        public bool IsPalindrome(string s)
        {
            if (s.Length == 0)
            {
                return true;
            }
            s = s.ToLower();
            foreach (var c in s)
            {
                if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
                {
                    S.Push(c);
                    Q.Enqueue(c);
                }
            }

            while (S.Count > 0)
            {
                var ss = S.Pop();
                var qq = Q.Dequeue();
                if (ss != qq)
                {
                    return false;
                }
            }
            return true;
        }
}

https://leetcode.com/problems/valid-palindrome/#/description

补充一个python的实现:

 1 class Solution:
 2     def isPalindrome(self, s: str) -> bool:
 3         S = list()#定义一个列表,模拟栈
 4         Q = list()#定义一个离诶包,模拟队列
 5         if len(s) == 0:#空字符串,被当作是回文字符串
 6             return True
 7         s = s.lower()#将原字符串转化为小写
 8         for c in s:#如果当前字符是小写字母(a~z)或者数字(0~9)
 9             if (ord(c) >= 97 and ord(c) <= 122) or (ord(c) >= 48 and ord(c) <= 57):
10                 S.append(c)#添加到栈中
11                 Q.append(c)#添加到队列中
12         while len(S) > 0:
13             ss = S.pop(-1)#栈取栈顶元素(尾部)
14             qq = Q.pop(0)#队列取队头元素(首部)
15             if ss != qq:#如果字符不相同,则表示不是回文
16                 return False
17         return True#如果所有字符都比对完毕,没有发现不相同的字符,则是回文

 

posted on 2017-04-26 19:16  Sempron2800+  阅读(131)  评论(0编辑  收藏  举报