华为笔试算法题集:字符去重及代码示例
170 浏览量
更新于2024-09-02
1
收藏 66KB PDF 举报
本篇文章主要针对华为的笔试面试,提供了四道算法题目及其详细解答,旨在帮助准备参加华为笔试的考生提升对算法问题的解决能力。这些题目涵盖了字符串处理和逻辑判断,适合备考者进行实战练习。
**第一题:字符串过滤重复字符**
题目要求编写一个名为`stringFilter`的函数,接收输入字符串`pInputStr`和其长度`lInputLen`,以及一个已分配好空间的输出字符串`pOutputStr`。目标是去除输入字符串中重复出现的字符,只保留首次出现的字符。函数需要遵循无IO输入输出的原则,只完成算法部分。例如,输入字符串"deefd"会输出"def","afafafaf"则输出"af"。
```cpp
void stringFilter(const char* pInputStr, long lInputLen, char* pOutputStr)
{
assert(pInputStr != NULL);
int i = 0;
if (pInputStr == NULL || lInputLen <= 1)
{
return;
}
const char* p = pInputStr;
while (*p != '\0')
{
if (!g_flag[(*p - 'a')]) // 如果字符首次出现
{
p++;
} else {
g_flag[*p - 'a'] = 1; // 标记已处理
p++; // 跳过已处理的字符
}
if (i < lInputLen) // 只写入未处理的字符到输出字符串
pOutputStr[i++] = *p;
}
}
```
此题考察了字符数组遍历、条件判断和状态标记的能力,同时也强调了函数接口的规范性,确保编译和运行无误。
**华为第一题19:19-19:36(17分钟)**:
这题的时间限制表明在实际面试中可能要求考生快速解决问题。这道题目可能是在考核考生的编程效率和对算法优化的理解,因为去除重复字符通常可以用哈希表或位图来加速查找,但此处仅使用了一个布尔数组`g_flag`来记录字符是否出现过。
总结来说,本文提供的华为笔试算法题有助于考生熟悉常见的面试题型,锻炼基础数据结构和算法技巧,以及面试中的逻辑表达和代码书写规范。通过实践这些题目,考生可以增强自身在实际笔试中的应对能力。
2022-05-17 上传
2023-08-03 上传
2024-01-15 上传
2023-09-19 上传
2023-08-07 上传
2023-08-30 上传
2023-09-05 上传
weixin_38641111
- 粉丝: 1
- 资源: 931