面试题 01.04. 回文排列
Posted cocobear9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 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 ; }
以上是关于面试题 01.04. 回文排列的主要内容,如果未能解决你的问题,请参考以下文章