【Leetcode】面试题 01.02. 判定是否互为字符重排、面试题 01.04. 回文排列

简介: 目录面试题 01.02. 判定是否互为字符重排 面试题 01.04. 回文排列

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

专栏:《Leetcode》

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


目录

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

面试题 01.04. 回文排列


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

https://leetcode.cn/problems/check-permutation-lcci/

题目描述:

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

示例:


思路:

设定两个下标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. 回文排列

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;
    else
        return false;
}


相关文章
|
算法 C++ 容器
Leetcode第三十一题(下一个排列)
这篇文章介绍了LeetCode第31题“下一个排列”的C++解决方案,该算法通过原地修改数组来找到下一个字典序更大的排列,如果不存在则重排为字典序最小的排列。
122 0
Leetcode第三十一题(下一个排列)
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
602 0
Leetcode第三题(无重复字符的最长子串)
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
186 0
|
Python
【Leetcode刷题Python】234.回文链表
两种判断链表是否为回文的方法:使用栈和拆分为两个链表后反转对比,并给出了相应的Python代码实现。
141 0
|
存储 安全 Java
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
185 0
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
259 0
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
156 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

热门文章

最新文章

下一篇
oss云网关配置