タイトル:
文字列を考えると、それはパリンドローム配列の一の構成の関数を記述したか否かを判断します。
回文文字列が正しい逆の二つの方向が同じ単語やフレーズですです。手段は、文字を並べ替えるように配置されています。
回文文字列は必ずしも間の辞書の単語ではありません。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
第二の溶液:
1.問題の最初の解決策:
(1)問題解決のアイデア:
- すべての文字の数が偶数、または文字の、唯一の発生が奇数の回数、パリンドローム配列である、そうでない場合ではありません
- 要素の反復性を利用してHashSetのは決定されません
- 文字配列C1 Sに文字列を変換します
- 新しいHashSetのセットを作成します。
- に添加元素のセットを使用してC1サイクル
- 追加されていない場合は、以前に初めて追加されたこと、そして、正常に追加
- 追加に失敗した場合、私は要素を削除することができますので、それは、要素が以前に追加されていることを証明しています
- サイクルの後、0または1に設定する要素の数ならば、文字列が一致することを示しています
- それ以外の場合は準拠していません
(2)コード:
/**
* 思路:
* 每个字符出现的次数为偶数, 或者有且只有一个字符出现的次数为奇数时, 是回文的排列; 否则不是
* 利用HashSet中的元素不重复性质来判定
* 将字符串s转换成字符数组c1
* 新建一个HashSet set
* 利用循环将c1中的元素添加进set中
* 若添加成功,则说明之前没有添加,即第一次添加
* 若添加失败,则证明该元素在之前就已经添加过,所以将该元素移除即可
* 循环结束后,若set的元素个数为0或者1,则证明该字符串符合条件
* 否则不符合
*/
public static boolean canPermutePalindrome(String s) {
Set<Character> set = new HashSet<Character>();
char[] c1 = s.toCharArray();
for(char c:c1){
if(!set.add(c)){
set.remove(c);
}
}
return set.size()<=1;
}