如何在不使用任何额外数据结构(没有额外的strs、列表等)或任何字符串方法的情况下过滤字符串



我正在尝试创建一个函数来检查字符串是否为回文。它应该只考虑字母数字字符,不包括空格。我基本上必须在字符串上不使用任何方法的情况下编写下面的代码(所以没有isalnum((、lower((等(,也没有添加额外的数据结构(所以没有y/''(。我想不出实现这一点的方法。有可能吗?函数应考虑大写字符与其小写计数器部分相等

def isPalindrome_py(x):
y = ''
for i in range(len(x)):
if x[i] == ' ':
pass
elif x[i].isalnum():
y += x[i]
y = y.lower()
if y[::-1] == y:
return True
else:
return False

编辑:例如-isPalindrome_py("#RaCe-CaR$!"(应该返回True

def isPal(x):
if len(x) < 2:
return True
elif not ('0' <= x[0] <= '9' or 'A' <= x[0] <= 'Z' or 'a' <= x[0] <= 'z'):
return isPal(x[1:])
elif not ('0' <= x[-1] <= '9' or 'A' <= x[-1] <= 'Z' or 'a' <= x[-1] <= 'z'):
return isPal(x[:-1])
elif x[0] != x[-1] and x[0] >= 'A' and x[-1] >= 'A' and ord(x[0]) + 32 != ord(x[-1]) and ord(x[0]) - 32 != ord(x[-1]):
return False
else:
return isPal(x[1:-1])

现在让我们打开这个怪物

该函数的工作原理是,尝试查找暗示字符串不是回文的字符,如果找不到任何冲突,则得出字符串必须是回文的结论。

第一个子句检查字符串是否是普通的回文(因为单个字符和空字符串都是回文(

第二个子句(elif not ('0' <= x[0]…(检查字符串中的第一个字符是否为字母数字。如果不是,它就会被忽略。

第三个子句执行相同的操作,但针对字符串中的最后一个字符。

第四个子句检查字符串中的第一个字符是否与字符串中的最后一个字符相同。它利用了这样一个事实,即在ASCII中,大写字母和小写字母相互删除了32个。