【Leetcode】面试题 01.06. 字符串压缩、面试题 05.07. 配对交换

简介: 目录面试题 01.06. 字符串压缩: 面试题 05.07. 配对交换

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

专栏:《Leetcode》

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


目录

面试题 01.06. 字符串压缩:

面试题 05.07. 配对交换


面试题 01.06. 字符串压缩

https://leetcode.cn/problems/compress-string-lcci/

题目描述:

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例:


思路:

开辟一个数组tmp(大小为S的大小x2+1),每次先将字符先存进去,计算每个字符的个数,然后存进去,个数存进去的细节可以注意看看注释,注释较为详细。

代码:

char* compressString(char* S) {
    char* tmp = (char*)malloc(sizeof(char) * (2 * strlen(S) + 1));
    int cur = 0;//用来遍历S的下标
    int n = 0;//用来赋值tmp和S的下标
    while (cur < strlen(S))
    {
        int num = 1;
        tmp[n++] = S[cur];
        int i = cur;//算每个字符的个数
        while (i < strlen(S))
        {
            if (tmp[n - 1] != S[i + 1])
            {
                break;
            }
            i++;
            num++;
        }
        char s = '0';
        if (num > 9)
        {//放在num>9,求余
            int a = 0;
            while (num > pow(10, a))
                a++;//4934,a=4
            if (num % (int)pow(10, a - 1) == 0)
                a--;
            if (num < pow(10, a))
                a--;
            int m = num;
            while (m > 0)
            {
                if (m / (int)pow(10, a) > 9)//防止除完这个数大于9
                    tmp[n++] = s + (m / pow(10, a) - 9);
                else 
                tmp[n++] = s + (m / pow(10, a));
                m = m % (int)pow(10, a--);
            }
            if(num % 10==0)
            tmp[n++] = s + (num % 10);
        }
        else
            tmp[n++] = s + num;
        cur += num;
    }
    tmp[n] = '\0';
    if (strlen(S) <= strlen(tmp))
        return S;
    return tmp;
}


面试题 05.07. 配对交换

https://leetcode.cn/problems/exchange-lcci/

题目描述:

配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。

示例:

代码:

int exchangeBits(int num){
        int a2=0x55555555;
        int a1=0x2aaaaaaa;
        a1=num&a1;//保留奇数位,偶数位一定为0
        a2=num&a2;//保留偶数位,奇数位一定为0
        a2=a2<<1;//偶数变奇数.
        a1=a1>>1;//奇数位边偶数
        return a1|a2;
}
相关文章
|
1月前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
4月前
|
安全 Java 编译器
【Java基础面试二十九】、说一说你对字符串拼接的理解
这篇文章讨论了Java中字符串拼接的四种常用方式(使用`+`运算符、`StringBuilder`、`StringBuffer`和`String`类的`concat`方法),每种方式适用的场景,以及在不同情况下的性能考量。
|
4月前
|
Java
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
这篇文章讨论了在Java中使用字符串时,推荐使用双引号`""`直接量方式而不是使用`new`操作符,因为`new`会在常量池之外额外创建一个对象,导致更多的内存占用。
|
5月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
69 1
|
5月前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
55 0
|
5月前
|
存储 安全 Java
Java面试题:请解释Java中的字符串和字符串缓冲区?
Java面试题:请解释Java中的字符串和字符串缓冲区?
39 0
|
5月前
|
存储 安全 Java
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
52 0
|
5月前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
90 0
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!