【LeetCode-インタビュー01.04]パリンドローム配列

タイトル:

文字列を考えると、それはパリンドローム配列の一の構成の関数を記述したか否かを判断します。
回文文字列が正しい逆の二つの方向が同じ単語やフレーズですです。手段は、文字を並べ替えるように配置されています。
回文文字列は必ずしも間の辞書の単語ではありません。

示例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;
}
公開された18元の記事 ウォンの賞賛0 ビュー461

おすすめ

転載: blog.csdn.net/aflyingcat520/article/details/105373363