网站设计美工多少,图像处理与网站开发,长沙做网站湖南微联讯点不错,关键一招文章目录 一、题目二、C# 题解 一、题目 给定一个字符串#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 点击此处跳转题目。
示例1#xff1a; 输入… 文章目录 一、题目二、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)取决于出现字符的种类多少。