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 五种算法进行路径规划,在同一个地图中规划 2 能够输出迭代曲线、规划路径长度 3 自定义地图 有注释,适合入门 ,路径规划;遗传算法;麻雀算法;狼群优化;粒子群算法;差分进化算法;迭代曲线;路径长度;自定义地图;...
1 五种算法进行路径规划,在同一个地图中规划 2 能够输出迭代曲线、规划路径长度 3 自定义地图 有注释,适合入门 ,路径规划;遗传算法;麻雀算法;狼群优化;粒子群算法;差分进化算法;迭代曲线;路径长度;自定义地图;有...
1. Dijkstra算法:求解图中两点间的最短路径。 2. Bellman-Ford算法:处理负权边的最短路径问题。 3. Kruskal算法和Prim算法:求解最小生成树,用于网络连接优化。 4. Ford-Fulkerson算法:计算网络的最大流,解决...
在"第四章__遗传算法1.ppt"至"第四章__遗传算法3.ppt"中,详细介绍了遗传算法的原理、步骤和实际应用,如旅行商问题、组合优化等问题的求解。 **模拟退火算法(Simulated Annealing, SA)**是受到固体物理中材料...
算法分析: (一)数据结构: 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:图论算法(包括最...
【C算法大全】涵盖了许多计算机科学中的基础算法,这些算法对于理解和解决各种计算问题至关重要。以下将详细讨论其中的关键知识点: 一、数论算法 1. **最大公约数(GCD)**:最大公约数是两个或多个整数共有的...
遗传算法求解求解vrp问题,以送货问题为算例,已知送货量和距离矩阵。
Chan 算法1是非递归双曲线方程组解法,具有解析表达式解。其主要的特点为在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加基站数量来提高算法精度。该算法的推导的前提是基于测量误差为零...
在C编程中,基本算法是构建复杂程序的基础,它们涵盖了数据处理、逻辑控制以及问题解决的多种方法。这里我们将深入探讨两个主要的知识点:数论算法和图论算法。 一、数论算法 1. 最大公约数(Greatest Common ...
本篇文章将深入探讨标题和描述中提到的一些核心算法,包括动态规划、分治算法、概率算法、模拟退火算法、搜索算法、贪婪算法、在线MATLAB应用、遗传算法以及组合算法。 1. **动态规划**:动态规划是一种解决具有...
1. 首次适应算法(First Fit) 首次适应算法是一种简单的内存分配策略。当一个进程请求内存时,系统会遍历所有的空闲分区,选择第一个足够大的空闲分区来满足进程的内存需求,并将其分配给进程。这种方法的优点是...
纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能...
代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传...
1. 强化学习算法:这是一种机器学习方法,通过与环境的交互来优化策略。在电梯调度中,算法会学习如何根据乘客需求、电梯状态和实时信息来调整电梯的行动,以最大化某些奖励指标,如乘客等待时间的减少或能源效率的...
1. 排序算法:包括冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等,理解它们的工作原理和时间复杂度是至关重要的。 2. 搜索算法:二分查找、线性查找、深度优先搜索(DFS)和广度优先搜索(BFS)是...
贪心算法 贪心算法 贪心算法 贪心算法 贪心算法 贪心算法
- SM1算法的具体细节并未公开,它是中国国家商用的对称密钥算法,为政府和军事等部门所使用。 - SM2算法是基于椭圆曲线加密技术的算法,包括SM2加密算法、SM2数字签名算法、SM2密钥交换协议和SM2散列算法等多个组成...