leetcode

leetcode-程序员面试金典-回文排列

2020-05-18  本文已影响0人  荣荣的靓仔小馒头

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

不得不说此题限于我有限的类C++思维,根本没有往“消消乐”这种快乐方法上想。
学到了一点新想法:对于字符串中重复字符的干扰,一定要想办法对字符串去重,化繁为简解决问题。

关于写法上,本人以前使用的string s 获取单个字符总是在遍历时候使用s.charAt(i),其实也可以通过s.toCharArray()直接转换成字符数组(淦!好方法)

下面粘贴一下AC代码

class Solution {
    public boolean canPermutePalindrome(String s) {
        Set<Character> set = new HashSet<>();
//另一种写法:HashSet<Character> set = new HashSet<Character>(); 
//对象的Character可以由JVM自动匹配,不需要再次表示类型
        char [] chars = s.toCharArray();
        for (Character character: chars)
        {
            if(!set.contains(character))
          //没有就加上
            set.add(character);
            else 
          //有就去重
             set.remove(character);
        }
        if(set.isEmpty ()|| set.size()==1)
            return true;
        else return false;
    }
}
上一篇下一篇

猜你喜欢

热点阅读