华为笔试算法面试题与参考答案分析【基于C++】

  发布时间:2019-09-05 14:15:02   作者:Cookie小甜饼   我要评论
这篇文章主要介绍了华为笔试算法面试题与参考答案,结合实例形式分析了基于C++的字符串转换、判断、排序等算法相关操作技巧,需要的朋友可以参考下

1.   26进制的字符串相加

两个大整数相加,每一位是一个小写字母,二十六进制,a表示0,z表示25,求结果。
输入: 2个26进制数;
输出:  2个26进制的和。
实例: 输入:  z        bc         输出: cb

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
        char str1[205], str2[205];
        int num1[205], num2[205], num[205];
        int i;
        while (cin >> str1 >> str2)
        {
                memset(num1, 0, sizeof(num1));
                memset(num2, 0, sizeof(num2));
                memset(num, 0, sizeof(num));
                int tmp = 0;
                for (i = strlen(str1) - 1; i >= 0; i--)
                        num1[++tmp] = str1[i] - 'a';
                tmp = 0;
                for (i = strlen(str2) - 1; i >= 0; i--)
                        num2[++tmp] = str2[i] - 'a';
                for (i = 1; i <= 202; i++)
                        num[i] = num1[i] + num2[i];
                for (i = 1; i <= 202; i++)
                        num[i + 1] += num[i] / 26, num[i] %= 26;
                int mk = 0;
                for (i = 202; i >= 1; i--)
                {
                        if (num[i]) mk = 1;
                        if (mk) printf("%c", num[i] + 'a');
                }
                if (!mk) printf("a");
                puts("");
        }
        return 0;
}

2.   两个字符串包含问题

两个字符串input1,和字符串input2,字符串元素的值域是26个大写字母,判断input2中的所有字符是否都包含在字符串input1中。 如果包含返回:ture, 否则返回:false

输入:  两个字符串: input1和input2,其中input1的长度大于input2。要求两个输入字符串input1和input2的长度不小于5. 如:A字符串:BBDDCFFE,B字符串:LCEFB

输出:true或false

位图思想:

无论是字符串1还是字符串2,都是由【a-z】字母组成的,所以最多只有26个字母,所以只要一个整数(32位)就可以表示字符串所表示的字母,假设这个字母出现,则对应的位置1,那么就算26个字母都出现了,也只需要26位置1.

#include <iostream>
#include <sstream>
#include <map>
#include <string.h>
using namespace std;
bool is_contained(string str1, string str2)
{
        int strmap = 0;
        const char * pstr = str1.data();
        while (*pstr != '\0')
        {
                strmap |= (1 << (*pstr - 'a'));
                pstr++;
        }
        pstr = str2.data();
        bool iscontained = true;
        while (*pstr != '\0')
        {
                if ((strmap & (1 << (*pstr - 'a'))) == 0)
                {
                        iscontained = false;
                        break;
                }
                pstr++;
        }
        return iscontained;
}
int main()
{
        string str1, str2;
        while (getline(cin, str1))
        {
                getline(cin, str2);
                if (str1.length() >= 5 && str2.length() >= 5 && (str1.length() > str2.length()))
                {
                        if (is_contained(str1, str2))
                                cout << "true" << endl;
                        else
                                cout << "false" << endl;
                }
                else
                        cout << "error: 字符串长度小于5" << endl;
        }
        return 0;
}

第二种方法:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string matchStr(string str1, string str2)
{
        string flag = "true";
        int len1 = str1.size();
        int num = 0;
        vector<int> pos;
        for (int i = 0; i < len1 - 1; ++i)
        {
                if (str1[i + 1] == str1[i])
                        pos.push_back(i + 1);
        }
        for (int i = 0; i < pos.size(); i++)
        {
                int tmp = pos[i] - i;
                str1.erase(str1.begin() + tmp);
        }
        for (int i = 0; i < str2.size(); i++)
        {
                num = str1.find(str2[i]);
                if (num < 0)
                {
                        flag = "false";
                        break;
                }
                else
                        continue;
        }
        return flag;
}
int main()
{
        string Str1, Str2;
        cin >> Str1;
        cin >> Str2;
        string Res = matchStr(Str1, Str2);
        cout << Res << endl;
        return 0;
}

3.   字符串解压缩,并且排序输出

 

相关文章

  • 腾讯公司c++面试小结

    这篇文章主要介绍了腾讯公司c++面试小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-03-02
  • C++ 面试题目(整理自牛客网)

    这篇文章主要介绍了 C++ 面试题目(整理自牛客网),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-02-13
  • 华为校招 C++岗面试经历总结【笔试+一面+二面+Offer】

    这篇文章主要介绍了华为校招 C++岗面试经历,总结分析了华为校招C++岗位的笔试题,以及一面、二面到最终拿到Offer的经历与相关经验感想,需要的朋友可以参考下
    2019-11-28
  • C++面试常见算法题与参考答案总结

    这篇文章主要介绍了C++面试常见算法题与参考答案,总结分析了C++面试中遇到的常见算法题与相应的参考答案,需要的朋友可以参考下
    2019-11-20
  • C++必备面试题与参考答案经典总结

    这篇文章主要介绍了C++必备面试题与参考答案,结合大量经典实例总结分析了C++面试过程中经常遇到的各种概念、原理、算法相关问题及参考答案,需要的朋友可以参考下
    2019-10-31
  • C/C++经典面试题(附答案)

    这篇文章主要介绍了C/C++经典面试题(附答案),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-10-23
  • C/C++求职者必备的20道面试题与参考答案解析

    这篇文章主要介绍了C/C++求职者必备的20道面试题与参考答案,总结分析了C/C++相关的常见概念、原理、知识点与注意事项,需要的朋友可以参考下
    2019-10-10
  • 腾讯的外包c++面试经历总结

    这篇文章主要介绍了腾讯的外包c++面试经历,总结记录了一次腾讯C++面试的经历,包括面试的流程、面试题目与相应的参考答案,需要的朋友可以参考下
    2019-09-29
  • 阿里面试必会的20道C++面试题与参考答案解析

    这篇文章主要介绍了阿里面试必会的20道C++面试题与参考答案,涉及C++指针、面向对象、函数等相关特性与使用技巧,需要的朋友可以参考下
    2019-09-26
  • 经典C++笔试面试题目与参考答案100例

    这篇文章主要介绍了经典C++笔试题目与参考答案,总结分析了C++常见的各种面试题目,包含C++常见知识点、技术难点、算法等,需要的朋友可以参考下
    2019-09-10

最新评论