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 遗传算法1 遗传算法1 遗传算法1
1. Dijkstra算法:求解图中两点间的最短路径。 2. Bellman-Ford算法:处理负权边的最短路径问题。 3. Kruskal算法和Prim算法:求解最小生成树,用于网络连接优化。 4. Ford-Fulkerson算法:计算网络的最大流,解决...
在"第四章__遗传算法1.ppt"至"第四章__遗传算法3.ppt"中,详细介绍了遗传算法的原理、步骤和实际应用,如旅行商问题、组合优化等问题的求解。 **模拟退火算法(Simulated Annealing, SA)**是受到固体物理中材料...
1. 最佳淘汰算法(OPT):该算法是基于未来使用的页面来选择要换出的页面。它可以保证最小的页面换入次数,但需要知道将来的页面访问序列,实际实现中很难实现。 2. 先进先出的算法(FIFO):该算法按照页面进入内存...
算法分析: (一)数据结构: 1.可利用资源向量Available 2.最大需求矩阵Max 3.分配矩阵Allocation 4.需求矩阵Need (二)功能介绍: 模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成: 第一...
1.s8算法1-1 算法基础 10.s8算法2-4 链表 哈希表 11.s8算法2-5 算法题 12.S8设计模式-1 设计模式简介 13.S8设计模式-2 创建型模式 14.S8设计模式-3 结构型模式 15.S8设计模式-4 行为型模式 16.5 设计模式总结 17.6 ...
数学建模中常用到以下算法1:蒙特卡罗算法;2:数据拟合、参数估计、插值等数据处理算法(常用matlab实现);3:线性规划、整数规划、多元规划、二次规划(用lingo、lingdo、matlab即可实现);4:图论算法(包括最...
遗传算法求解求解vrp问题,以送货问题为算例,已知送货量和距离矩阵。
1. 排序算法:包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序等。理解它们的时间复杂度和空间复杂度特性,以及适用场景。 2. 查找算法:线性查找、二分查找、哈希查找。二分查找在有序...
`遗传算法1`可能是一个单独的遗传算法实现,可能与上述的一种或多种方法有关,或者是一个更具体的改进版本。这个文件可能包含源代码、算法流程图或者实验结果。 `新建文件夹`可能包含其他辅助文件,如数据集、结果...
本篇文章将深入探讨标题和描述中提到的一些核心算法,包括动态规划、分治算法、概率算法、模拟退火算法、搜索算法、贪婪算法、在线MATLAB应用、遗传算法以及组合算法。 1. **动态规划**:动态规划是一种解决具有...
1. 首次适应算法(First Fit) 首次适应算法是一种简单的内存分配策略。当一个进程请求内存时,系统会遍历所有的空闲分区,选择第一个足够大的空闲分区来满足进程的内存需求,并将其分配给进程。这种方法的优点是...
代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传...
1. 强化学习算法:这是一种机器学习方法,通过与环境的交互来优化策略。在电梯调度中,算法会学习如何根据乘客需求、电梯状态和实时信息来调整电梯的行动,以最大化某些奖励指标,如乘客等待时间的减少或能源效率的...
纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能...
1. **烟花算法**(Fireworks Algorithm, FWA): 火花算法是2010年由华中科技大学的学者提出的一种新型全局优化算法。它模拟了烟花爆炸的过程,其中每个烟花代表一个解空间中的潜在解,爆炸产生的火花则代表新的解...
1.公钥密码算法需要素数,任何合理规模的网络也需要许多这样的素数,了解如何对产生的随机数进行素性检测的方法。 2.掌握和理解Solovag-Strassen算法、Lehmann算法和Rabin-Miller素性检测算法的原理。
1977 年 1 月 15 日,DES 算法被美国国家标准局颁布为联邦数据加密标准(Data Encryption Standard),于 1977 年 7 月 15 日生效。 DES 算法原理 DES 算法是一种基于 Feistel 密码体制的分组加密算法。它将明文...
粒子群算法(Particle Swarm Optimization, PSO)与遗传算法(Genetic Algorithm, GA)是两种在优化问题中广泛应用的全局搜索方法。它们都是基于自然选择和群体智能的启发式算法,能够有效地解决复杂多模态优化问题...