文章目錄
- 一、題目
- 二、C# 題解
一、題目
??給定一個字符串,編寫一個函數判定其是否為某個回文串的排列之一。
??回文串是指正反兩個方向都一樣的單詞或短語。排列是指字母的重新排列。
??回文串不一定是字典當中的單詞。
??點擊此處跳轉題目。
示例1:
輸入:“tactcoa”
輸出:true(排列有"tacocat"、“atcocta”,等等)
二、C# 題解
??回文字符串的排列,即字符串中每個字符出現的次數全為偶數,或最多有 1 個奇數。因此用 num
記錄出現次數為奇數的個數,遍歷更新即可。
??這里題目沒有明確字符串是否為英文字母,因此 map 大小定為 128。
public class Solution {public bool CanPermutePalindrome(string s) {int[] map = new int[128]; // map 記錄表int num = 0; // 記錄奇數次出現字符的個數for (int i = 0; i < s.Length; i++) {int index = (int)(s[i]); // 獲取字符的記錄位置if (map[index] == 0) { // 出現偶數次,更新記錄和 nummap[index]++;num++;}else { // 出現奇數次,同上map[index]--;num--;}}return num < 2; // 奇數次出現字符的個數不能 > 1}
}
-
時間復雜度: O ( n ) O(n) O(n)。
-
空間復雜度: O ( 1 ) O(1) O(1),取決于出現字符的種類多少。