【Leetcode】面试题 01.02. 判定是否互为字符重排、面试题 01.04. 回文排列
创始人
2024-05-13 16:57:47

 作者:一个喜欢猫咪的的程序员

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


目录

面试题 01.02. 判定是否互为字符重排 

面试题 01.04. 回文排列


面试题 01.02. 判定是否互为字符重排 

面试题 01.02. 判定是否互为字符重排https://leetcode.cn/problems/check-permutation-lcci/ 题目描述:

给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例:


思路:

设定两个下标n1,n2来遍历两个字符串,设s2的长度为size,判断s1[n1]==s2[n2],如果有交换s2中n2下标指向的字符和字符串的最后一个字符,n1++, size--;

注意极端情况:

s1的长度不等于s2的长度,返回false。

代码:

void swap(char* ch1, char* ch2)
{char tmp = *ch1;*ch1 = *ch2;*ch2 = tmp;
}
bool CheckPermutation(char* s1, char* s2) {int n1 = 0;int size = strlen(s2);if(strlen(s1)!=strlen(s2))return false;while (n1 < strlen(s1)){int num = size;int n2 = 0;while (n2 < size){if (s1[n1] == s2[n2]){if (n2 != size - 1)swap(&s2[n2],&s2[size-1]);size--;n1++;break;}n2++;}if (size == num){return false;}}return true;
}

面试题 01.04. 回文排列

面试题 01.04. 回文排列https://leetcode.cn/problems/palindrome-permutation-lcci/

题目描述:

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

示例:


 思路:

注意回文串的特点是奇数个字符的数量要么是1要么0.

剩余的思想跟上题差不多

代码:

void swap(char* ch1, char* ch2)
{char tmp = *ch1;*ch1 = *ch2;*ch2 = tmp;
}
bool canPermutePalindrome(char* s) {int num = 0;//奇数字符个数int cur = 0;int size = strlen(s);if (size == 1)return true;while (cur < size){int m = 1;//个数int i = cur+1;while (i < size){if (s[cur] == s[i]){m++;swap(&s[i], &s[size - 1]);size--;}i++;}if (m % 2 == 1)num++;cur++;}if (num == 0 || num == 1)return true;elsereturn false;
}

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...