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#如果所有字符都比对完毕,没有发现不相同的字符,则是回文