美文网首页leetcode
leetcode-程序员面试金典-回文排列

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

作者: 荣荣的靓仔小馒头 | 来源:发表于2020-05-18 10:37 被阅读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;
        }
    }
    

    相关文章

      网友评论

        本文标题:leetcode-程序员面试金典-回文排列

        本文链接:https://www.haomeiwen.com/subject/oxzyohtx.html