266. Palindrome Permutation

Given a string, determine if a permutation of the string could form a palindrome.
For example,
"code"-> False,"aab"-> True,"carerac"-> True.

初看很简单, 26个字母存字符, 计算每个字符的奇偶数。
可是已测试发现输入串不仅仅是小写字符, 还有很多, 所以果断hashmap 或者char[256]. 代码如下, 可是发现只击败了不到20%的java code。 还有最开始有个印象只要找到一个基数就行了。改为set. 动态删减set值, 最后判断set.size(); 结果还是不超过20%。 继续!!!!看到个大神代码击败83%以上。
和set的思路很像, 不过他巧妙的用了boolean[256] 的数组存储。再加个count变量辅助。 完美!

public boolean canPermutePalindrome(String s) {
       boolean[] chars = new boolean[256];
       int count = 0;
       for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            count += chars[ch] ? -1 : 1;
            chars[ch] = ! chars[ch];
       }
      return count < 2;
}


public class Solution {   
     public boolean canPermutePalindrome(String s) {
            HashMapcharmap = new HashMap<>(); 
            for(int i = 0; i < s.length(); i++){
                     charmap.put(s.charAt(i), charmap.getOrDefault(s.charAt(i), 0) + 1);               }
            int odd = 0;
            Setkeyset = charmap.keySet();
            for(char key : keyset){
                    if(charmap.get(key) % 2 != 0){
                            odd++;
                     }
                    if(odd > 1 && s.length() % 2 == 0 || odd > 2 && s.length() % 2 ==1){
                             return false;
                   }
             }
            return true;
     }
}

Setcharset = new HashSet<>();
           for(int i = 0; i < s.length(); i++){
                   if(charset.contains(s.charAt(i))){
                         charset.remove(s.charAt(i));
                   }else{
                         charset.add(s.charAt(i));
                   }
           }
return charset.size() == 1 || charset.size() == 0;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 10,536评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,939评论 0 2
  • java中String的常用方法 1、length()字符串的长度 例:char chars[]={'a','b'...
    赤赤有名阅读 6,313评论 0 10