1. 题目概述
LeetCode 758题:“Bold Numbers in String”,要求你找出字符串中所有加粗的数字。加粗的数字是指被星号(*)包围的数字。例如,在字符串 "ab1*2*3bc"
中,加粗的数字是 1*2*3
。
2. 解题思路
为了解决这个问题,我们可以采用以下步骤:
- 初始化变量:创建一个字符串来存储结果,并初始化一个指针来遍历输入字符串。
- 遍历字符串:使用循环遍历输入字符串中的每个字符。
- 识别加粗数字:当遇到星号(*)时,检查前一个字符是否是数字,如果是,则从星号开始记录数字。
- 记录结果:当遇到非星号字符或字符串末尾时,将记录的数字添加到结果字符串中。
- 返回结果:遍历完成后,返回结果字符串。
3. C语言代码实现
以下是用C语言实现的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* boldNumbersInString(char* s) {
int len = strlen(s);
char* result = (char*)malloc(sizeof(char) * (len + 1));
if (result == NULL) {
return NULL;
}
int j = 0;
int start = -1;
for (int i = 0; i < len; ++i) {
if (s[i] == '*') {
if (start != -1 && (i == len - 1 || !isdigit(s[i + 1]))) {
int numLen = i - start;
for (int k = 0; k < numLen; ++k) {
result[j++] = s[start + k];
}
result[j++] = '*';
start = -1;
}
} else if (isdigit(s[i])) {
if (start == -1) {
start = i;
}
}
}
result[j] = '\0';
return result;
}
int main() {
char s[] = "ab1*2*3bc";
char* result = boldNumbersInString(s);
printf("%s\n", result);
free(result);
return 0;
}
4. 性能优化
- 内存管理:代码中使用了动态内存分配来创建结果字符串。在实际应用中,应确保在不再需要时释放分配的内存。
- 效率提升:代码在遍历字符串时,只记录必要的数字和星号,避免了不必要的字符串操作。
5. 总结
通过以上步骤和代码示例,我们可以有效地解决LeetCode 758题。这种方法不仅简洁,而且易于理解,适用于类似的字符串处理问题。