作者:一个喜欢猫咪的的程序员
专栏:《Leetcode》
喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》
目录
面试题 01.06. 字符串压缩:
面试题 05.07. 配对交换
面试题 01.06. 字符串压缩:
面试题 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. 配对交换
面试题 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;
}