华为笔试算法题集:字符去重及代码示例

16 下载量 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`来记录字符是否出现过。 总结来说,本文提供的华为笔试算法题有助于考生熟悉常见的面试题型,锻炼基础数据结构和算法技巧,以及面试中的逻辑表达和代码书写规范。通过实践这些题目,考生可以增强自身在实际笔试中的应对能力。