其他分享
首页 > 其他分享> > 面试题 01.04. 回文排列

面试题 01.04. 回文排列

作者:互联网

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

示例1:

输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)


链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci

 

方法一:利用HashSet原理,采用消消乐,如果集合里面没有当前的字符就添加,如果有就消除

public static  boolean canPermutePalindrome(String s) {
        if(s==null || s.length()<1){
            return false ;
        }
        Set<Character> set = new HashSet<Character>();
        for(char ch :s.toCharArray()) {
            if(set.contains(ch)) {
                set.remove(ch);
            }else {
                set.add(ch);
            }
        }
        return set.size()<=1 ;
    }

方法二:模拟哈希表,统计每个字符的个数,如果字母的次数是奇数的次数>1那么返回F

public boolean canPermutePalindrome(String s) {
        int oddNum=0;
        int [] arr = new int[128];
        for(int i=0;i<s.length();i++) {
            arr[s.charAt(i)]++;
        }
        for(int i=0;i<arr.length;i++) {
            if(arr[i]%2!=0) oddNum++;
        }
        if(oddNum>1) return false;
        return true ;
    }

 

标签:排列,面试题,ch,return,int,set,01.04,回文
来源: https://www.cnblogs.com/cocobear9/p/12840006.html