如何在Java中使用位操作来检查输入字符串是否是回文的排列? (而不是布尔数组)
Java BitSet可以帮助进行位操作。有许多与BitSet一起使用的内置方法,有些在下面的评论中提到:
private static boolean canPalindrome(String wordStr) {
BitSet bitSet = new BitSet(256);
for (int i = 0; i < wordStr.length(); i++) {
char letter = wordStr.charAt(i); // following letter ascii value
if (letter != ' ') { // space char ' ' does not affect the palindrome
bitSet.flip(letter) //flip turns 0->1 and 1->0;
}
}
int cardinality = bitSet.cardinality(); //represents all '1' bits in BitSet
return cardinality <= 1; //Palindrome can hold 0-1 chars with ODD count
}
这里的基本思想是跟踪每个字母出现的次数。仅当我们在wordStr中出现最多1个字母且出现ODD次数时才返回TRUE。