華為筆試算法面試題與參考答案分析【基于C++】
1. 26進(jìn)制的字符串相加
兩個(gè)大整數(shù)相加,每一位是一個(gè)小寫字母,二十六進(jìn)制,a表示0,z表示25,求結(jié)果。
輸入: 2個(gè)26進(jìn)制數(shù);
輸出: 2個(gè)26進(jìn)制的和。
實(shí)例: 輸入: 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. 兩個(gè)字符串包含問題
兩個(gè)字符串input1,和字符串input2,字符串元素的值域是26個(gè)大寫字母,判斷input2中的所有字符是否都包含在字符串input1中。 如果包含返回:ture, 否則返回:false
輸入: 兩個(gè)字符串: input1和input2,其中input1的長(zhǎng)度大于input2。要求兩個(gè)輸入字符串input1和input2的長(zhǎng)度不小于5. 如:A字符串:BBDDCFFE,B字符串:LCEFB
輸出:true或false
位圖思想:
無論是字符串1還是字符串2,都是由【a-z】字母組成的,所以最多只有26個(gè)字母,所以只要一個(gè)整數(shù)(32位)就可以表示字符串所表示的字母,假設(shè)這個(gè)字母出現(xiàn),則對(duì)應(yīng)的位置1,那么就算26個(gè)字母都出現(xiàn)了,也只需要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: 字符串長(zhǎng)度小于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. 字符串解壓縮,并且排序輸出

相關(guān)文章
- 這篇文章主要介紹了騰訊公司c++面試小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2020-03-02
這篇文章主要介紹了 C++ 面試題目(整理自??途W(wǎng)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2020-02-13華為校招 C++崗面試經(jīng)歷總結(jié)【筆試+一面+二面+Offer】
這篇文章主要介紹了華為校招 C++崗面試經(jīng)歷,總結(jié)分析了華為校招C++崗位的筆試題,以及一面、二面到最終拿到Offer的經(jīng)歷與相關(guān)經(jīng)驗(yàn)感想,需要的朋友可以參考下2019-11-28- 這篇文章主要介紹了C++面試常見算法題與參考答案,總結(jié)分析了C++面試中遇到的常見算法題與相應(yīng)的參考答案,需要的朋友可以參考下2019-11-20
- 這篇文章主要介紹了C++必備面試題與參考答案,結(jié)合大量經(jīng)典實(shí)例總結(jié)分析了C++面試過程中經(jīng)常遇到的各種概念、原理、算法相關(guān)問題及參考答案,需要的朋友可以參考下2019-10-31
- 這篇文章主要介紹了C/C++經(jīng)典面試題(附答案),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-10-23
- 這篇文章主要介紹了C/C++求職者必備的20道面試題與參考答案,總結(jié)分析了C/C++相關(guān)的常見概念、原理、知識(shí)點(diǎn)與注意事項(xiàng),需要的朋友可以參考下2019-10-10
騰訊的外包c(diǎn)++面試經(jīng)歷總結(jié)
這篇文章主要介紹了騰訊的外包c(diǎn)++面試經(jīng)歷,總結(jié)記錄了一次騰訊C++面試的經(jīng)歷,包括面試的流程、面試題目與相應(yīng)的參考答案,需要的朋友可以參考下2019-09-29- 這篇文章主要介紹了阿里面試必會(huì)的20道C++面試題與參考答案,涉及C++指針、面向?qū)ο?、函?shù)等相關(guān)特性與使用技巧,需要的朋友可以參考下2019-09-26
- 這篇文章主要介紹了經(jīng)典C++筆試題目與參考答案,總結(jié)分析了C++常見的各種面試題目,包含C++常見知識(shí)點(diǎn)、技術(shù)難點(diǎn)、算法等,需要的朋友可以參考下2019-09-10


