我看到,互联网上的大多数解决方案要么将字符串作为输入,要么将字符串反转,然后进行测试。以下是考虑两点的解决方案:
1) 输入是一个非常大的字符串,因此不能只从用户那里获取。
2) 输入字符串将有大写和特殊字符。
3) 我没有研究过复杂性,也没有看到进一步的改进。会征求建议。def isPalimdromeStr(self, strInput):
strLen = len(strInput)
endCounter = strLen - 1
startCounter = 0
while True:
# print(startCounter, endCounter)
# print(strInput[startCounter].lower(), strInput[endCounter].lower())
while not blnValidCh(self, strInput[startCounter].lower()):
startCounter = startCounter + 1
while not blnValidCh(self, strInput[endCounter].lower()):
endCounter = endCounter - 1
# print(startCounter, endCounter)
# print(strInput[startCounter].lower() , strInput[endCounter].lower())
if (strInput[startCounter].lower() != strInput[endCounter].lower()):
return False
else:
startCounter = startCounter + 1
endCounter = endCounter - 1
if (startCounter == strLen - 1):
return True
# print("---")
def blnValidCh(self, ch):
if rePattern.match(ch):
return True
return False
global rePattern
rePattern = re.compile('[a-z]')
blnValidPalindrome = classInstance.isPalimdromeStr("Ma##!laYal!! #am")
print("***")
print(blnValidPalindrome)