A string is a palindrome if it has exactly the same sequence of characters when read left-to-right as it has when read right-to-left. For example, the following strings are palindromes:
-
"kayak",
-
"codilitytilidoc",
-
"neveroddoreven".
A string A is an anagram of a string B if A can be obtained from B by rearranging the characters. For example, in each of the following pairs one string is an anagram of the other:
-
"mary" and "army",
-
"rocketboys" and "octobersky",
-
"codility" and "codility".
Write a function:
class Solution { public int isAnagramOfPalindrome(String S); }
that, given a non-empty string S consisting of N characters, returns 1 if S is an anagram of some palindrome and returns 0 otherwise.
Assume that:
- N is an integer within the range [1..100,000];
- string S consists only of lower-case letters (a−z).
For example, given S = "dooernedeevrvn", the function should return 1, because "dooernedeevrvn" is an anagram of the palindrome "neveroddoreven". Given S = "aabcba", the function should return 0.
Complexity:
- expected worst-case time complexity is O(N);
- expected worst-case space complexity is O(1) (not counting the storage required for input arguments).
解决方案:
时间复杂度和空间复杂度都能符合要求
public int isAnagramOfPalindrome2(String S) {
int n = S.length();
Vector<Character> v = new Vector<Character>(26);
for(int i = 0; i < n; i++) {
Character c = S.charAt(i);
if(v.contains(c)) {//已经包含就移除,意思是出现次数为偶数的就不统计
v.remove(c);
} else {
v.add(c);
}
}
if(n % 2 == 0 && v.size() == 0) {//S的长度的偶数,那么各个字母的出现次数必须都是偶数
return 1;
} else if(n % 2 != 0 && v.size() == 1) {//S的长度是奇数,那么可以有一个字母的出现次数是奇数
return 1;
} else {
return 0;
}
}
分享到:
相关推荐
算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法
1. 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及bresenham算法的基本原理; 2. 掌握以上算法生成直线段的基本过程; 3. 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及...
动态规划,分治算法,概率算法,模拟退火算法,搜索算法,贪婪算法,网上matlab,遗传算法,组合算法.
纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能...
算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法算法
LFU算法LFU算法LFU算法LFU算法LFU算法
模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...
分配算法 首次适应算法 最佳适应算法 循环首次适应算法 有流程图 源代码
A5算法A5算法A5算法A5算法A5算法A5算法A5算法A5算法A5算法A5算法A5算法
POS算法POS算法POS算法POS算法POS算法
Python复现遗传算法、蚁群优化算法、粒子群算法、禁忌搜索算法 详细算法介绍链接:https://blog.csdn.net/qq_44186838/article/details/109181453
详细介绍了神经网络算法、粒子群算法、遗传算法、模糊逻辑控制、免疫算法、蚁群算法、小波分析算法及其MATLAB的实现方式等内容; 第二部分详细介绍了智能算法的工程中的应用问题,包括模糊神经网络在工程中的应用、...
文化算法文化算法文化算法文化算法文化算法文化算法文化算法文化算法
用matlab实现了标准粒子群算法,遗传算法,以及粒子群遗传算法的结合算法。可直接运行
经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf经典算法之遗传算法.pdf...
1. 通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理 2. 掌握多边形区域填充算法的基本过程 3. 掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。 实验设备及实验环境 计算机(每人一台) ...
图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法论文1图像检测算法...
我搜集的电梯调度算法,论文。包括:强化学习算法,LOOK调度算法,最短寻道算法,遗传算法,滚动优化算法,模糊控制,预约电梯群控算法,基于现场总线的算法。希望免除大家搜索之苦。
4、编程实现利用1/8圆中点算法和Bresenham算法生成圆,并显示,要求圆心和半径可以任意设置。 5、构造任意一个封闭并且不自交的多边形,假定该多边形内部是四连通的。要求: 用多边形扫描线算法实现对多边形内部的...
算法:C语言实现+第5部分+图算法 1到4部分的后续 第五部分