力扣——判斷一個字符串是否是迴文串

題目描述:

給定一個字符串,編寫一個函數判定其是否爲某個迴文串的排列之一。

迴文串是指正反兩個方向都一樣的單詞或短語。排列是指字母的重新排列。

迴文串不一定是字典當中的單詞。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/palindrome-permutation-lcci

示例1:

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

解題思路:

1.什麼是迴文串

  • 只有一個字符個數爲奇數,其餘字符個數都爲偶數,若出現2個或2個以上字符個數爲奇數的字符則表示非迴文串
  • 長度爲1的字符串也是迴文數(滿足只有一個字符個數爲奇數)

2.實現思路

  • 因爲要知道字符串包含的每個字符的個數,所以把字符串轉成一個字符數組
  • 要知道字符數組中是否存在2個或2個以上奇數個字符,遍歷數組,使用Map來存每個字符的個數
  • key:數組中字符 value:字符出現的次數
  • 遍歷Map集合,統計字符次數爲奇數的字符個數,得出結果

3.具體代碼

 public static Boolean canPermutePalindrome(String s) {
        if (s.length() == 1) {
            return false;
        }

        char[] temp = s.toCharArray();
        //統計字符數組中,每個字符個數
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < temp.length; i++) {
            if (map.containsKey(temp[i])) {
                map.put(temp[i], map.get(temp[i]) + 1);
            } else {
                map.put(temp[i], 1);
            }
        }

        int count = 0;//統計數組中出現奇數個字符
        for (Character key : map.keySet()) {
            int val = map.get(key);
            if (val % 2 != 0) {
                count++;
                continue;
            }
        }
        //出現一個以上的奇數個字符,則不是迴文串
        if (count > 1) {
            return false;
        }

        return true;
    }

源碼地址:
https://gitee.com/LynneLing/Algorithm.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章