检查回文数/字符串的奇数/偶数长度是个好主意吗?我遇到的大多数片段都不做这个基本测试。如果长度是均匀的,它不能是回文,不是吗?
if len(var) % 2 != 0:
# could be a palindrome, continue...
else:
break
或者直接比较第一个和最后一个数字/字母是否更好(即更快)?
编辑:好的,愚蠢的问题,应该三思而后行! :)
答案 0 :(得分:22)
ABBA - 四个字母palindrome的示例,意思是长度。
回文是一个单词,短语,number或其他characters序列,向后或向前读取相同的内容......
答案 1 :(得分:10)
检查回文的最简单方法是简单地将字符串与其反向进行比较:
def ispalindrome(s):
return s == s[::-1]
这使用带有负步骤的扩展切片向后走过s
并反过来。
答案 2 :(得分:8)
baab =回文结构,长度为4,均匀
答案 3 :(得分:3)
试试这个:
is_palindrome = lambda s : all(s1==s2 for s1,s2 in zip(s[:len(s)/2],s[-1:-(len(s)+1)/2:-1]))
仅检查前半部分的后半部分,并在发现不匹配时立即发生短路。
答案 4 :(得分:2)
简单案例:aa。
更复杂的案例:aaaa。
等等。
答案 5 :(得分:1)
即使长度的弦也可以是回文。 Wikipedia对此限制没有任何说明。
答案 6 :(得分:0)
n=raw_input("Enter a string==>")
n=int(n)
start=0
term=n
while n>0:
result=n%10
start=start*10+result
n=n/10
print start
if term==start:
print "True"
else:
print "False"
答案 7 :(得分:0)
如果string.length为偶数然后:所有字符数都应为偶数,所以我们不能有一个奇数的字符。
如果string.length为奇数则:一个字符数必须为奇数,因此并非所有字符数都应为偶数。
-----------------我为后续角色实现了以下JavaScript:
function isStrPermutationOfPalindrome(_str) { // backward = forward
var isPermutationOfPalindrome = true;
var _strArr = [..._str];
var _strArrLength = _strArr.length;
var counterTable = getCharsTabularFrequencies(_str);
var countOdd = 0;
var countEven = 0;
for (let [ky, val] of counterTable) {
if (val % 2 == 0) {
countEven = countEven + 1;
} else {
countOdd = countOdd + 1;
}
}
if (_strArrLength % 2 == 0) {
//Even count of all characters,otherwise false.
//so can not have a character with odd count.
if (countOdd != 0) {
isPermutationOfPalindrome = false;
}
} else {
//Odd count of 1 character
//so not all chars with even count, only one char of odd count.
if (countOdd > 1 || countOdd == 0) { //no odd, or more than one odd [ only one odd should be to return true]
isPermutationOfPalindrome = false;
}
}
return isPermutationOfPalindrome;
}
function getCharsTabularFrequencies(str) {
str = str.toLowerCase();
var arr = Object.assign([], str);
var oMap = new Map();
var _charCount = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === ' ') {
continue;
}
_charCount = 0;
for (let j = 1; j < arr.length; j++) {
{
if (arr[i] === arr[j]) {
_charCount = _charCount + 1;
}
}
}
if (i == 0)
_charCount = _charCount + 1;
if (!oMap.has(arr[i]))
oMap.set(arr[i], _charCount)
}
return oMap;
}
let _str = 'tactcoapapa';
console.log("Is a string of '" + _str + "' is a permutation of a palindrome ? ANSWER => " + isStrPermutationOfPalindrome(_str));