zoukankan      html  css  js  c++  java
  • 回文排列

    给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
    回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
    回文串不一定是字典当中的单词。
    提供三种解法

    解法一:利用数组统计每个字符出现次数,如果出现次数为奇数,并且小于2,那么它就是回文排列

    public static boolean canPermutePalindrome1(String s){
            int[] arr = new int[255];
            int count = 0;
            for(int i = 0;i<s.length();i++){
                arr[s.charAt(i) - (char)0]++;
            }
            for(int i = 0;i < 255;i++){
                if(arr[i]%2 != 0){
                    count++;
                }
            }
            return count < 2;
        }

    解法二:利用set集合,如果set集合不包含该字符,add,包含的话,remove

    public static boolean canPermutePalindrome2(String s){
            Set<Character> set = new HashSet<>();
            for(int i = 0;i<s.length();i++){
                if(!set.add(s.charAt(i))){
                    set.remove(s.charAt(i));
                }else {
                    set.add(s.charAt(i));
                }
            }
            return set.size()<2;
     }

    解法三:利用位运算,结合BigInteger来进行操作

    public static boolean canPermutePalindrome3(String s){
            BigInteger result = new BigInteger("0");
            for(int i = 0;i<s.length();i++){
                result = result.xor(new BigInteger("1").shiftLeft(s.charAt(i)));
            }
            return result.and(result.subtract(new BigInteger("1"))).toString().equals("0");
    }
  • 相关阅读:
    制作一款3D炸弹超人游戏
    C#集合中的Add与AddRange方法
    NGUI与EasyTouch结合使用
    Buff系统的实现
    Buff系统框架设计
    Buff系统设计
    Linux 服务管理两种方式service和systemctl
    centos上为新创建的用户(git)指定根目录并生成公钥和私钥
    centos7安装php7
    centos7上安装mysql8(下)
  • 原文地址:https://www.cnblogs.com/du001011/p/14152911.html
Copyright © 2011-2022 走看看