【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;
}
相关文章
|
2月前
|
算法
【数组相关面试题】LeetCode试题
【数组相关面试题】LeetCode试题
|
7天前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
22 0
|
12天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
22 1
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
15天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
27天前
|
算法
【力扣经典面试题】121. 买卖股票的最佳时机
【力扣经典面试题】121. 买卖股票的最佳时机
|
27天前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
2月前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
17 0
|
2月前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
62 1
|
3月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
253 0
2024年Java秋招面试必看的 | MySQL调优面试题

热门文章

最新文章