題目描述:
給定一個字符串,編寫一個函數判定其是否爲某個迴文串的排列之一。
迴文串是指正反兩個方向都一樣的單詞或短語。排列是指字母的重新排列。
迴文串不一定是字典當中的單詞。
來源:力扣(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;
}