【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;
}
相关文章
|
3月前
|
安全 Java 编译器
【Java基础面试二十九】、说一说你对字符串拼接的理解
这篇文章讨论了Java中字符串拼接的四种常用方式(使用`+`运算符、`StringBuilder`、`StringBuffer`和`String`类的`concat`方法),每种方式适用的场景,以及在不同情况下的性能考量。
|
3月前
|
Java
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
这篇文章讨论了在Java中使用字符串时,推荐使用双引号`""`直接量方式而不是使用`new`操作符,因为`new`会在常量池之外额外创建一个对象,导致更多的内存占用。
|
4月前
|
存储 安全 Java
Java面试题:请解释Java中的字符串和字符串缓冲区?
Java面试题:请解释Java中的字符串和字符串缓冲区?
33 0
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
114 2
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
16 1