# 记一次华为机试

## 消消乐（字符串）

### 示例

```输入：mMbccbc

```

### 题解

```const readline = require('readline');

input: process.stdin,
output: process.stdout,
});

rl.on('line', function (line) {
console.log(solution(line.trim()));
});

function solution(str) {
if (/[^a-zA-Z]/.test(str)) {
return 0;
}
if (str.length === 1) {
return 1;
}
if (str.length === 2) {
if (str[0] === str[1]) {
return 0;
} else {
return 2;
}
}
let res = '';
let cur = 0;
for (let i = 0; i < str.length - 1; i++) {
if (str[i] === str[i + 1]) {
i++;
} else {
if (res.length > 0 && res[res.length - 1] === str[i]) {
res = res.slice(0, res.length - 1);
} else {
res += str[i];
}
}
cur = i;
}
cur = cur + 1;
if (str[cur]) {
if (res[res.length - 1] === str[cur]) {
res = res.slice(0, res.length - 1);
} else {
res += str[cur];
}
}
return res.length;
}
```

## 矩阵最大值（二维矩阵）

```输入：
5
1,0,0,0,1
0,0,0,1,1
0,1,0,1,0
1,0,0,1,1
1,0,1,0,1

122

```

### 题解

```const readline = require('readline');

input: process.stdin,
output: process.stdout,
});

let count = 0;
let res = 0;

rl.on('line', function (line) {
if (count === 0) {
count = +line;
res = 0;
} else {
res += solution(line.trim());
if (count === 1) {
console.log(res);
}
count--;
}
});

function solution(str) {
const arr = str.split(',');
let max = parseInt(arr.join(''), 2);
const len = arr.length;
for (let i = 1; i < len; i++) {
const tmp = parseInt(arr.slice(i, len).concat(arr.slice(0, i)).join(''), 2);
max = max > tmp ? max : tmp;
}
return max;
}
```

## 树的剪枝（树）

```输入：
5
2 10
8 10
3 8
4 8
1 4
8

2 10

```

### 题解

```const readline = require('readline');

input: process.stdin,
output: process.stdout,
});

let obj = {};
let count = 0;
const removed_arr = [];

rl.on('line', function (line) {
if (count === 0) {
count = parseInt(line) + 1;
obj = {};
removed_arr.length = 0;
} else {
if (count === 1) {
const arr = [];
func(line, obj);
for (const key in obj) {
if (key !== line && !removed_arr.includes(key)) {
arr.push(key);
}
arr.push(...obj[key].filter((item) => !removed_arr.includes(item)));
}
console.log(arr.sort((a, b) => Number(a) - Number(b)).join(' '));
} else {
const [value, key] = line.split(' ');
if (obj[key]) {
obj[key].push(value);
} else {
obj[key] = [value];
}
}
count--;
}
});

function func(key, obj) {
if (obj[key]) {
for (const val of obj[key]) {
func(val, obj);
}
}
removed_arr.push(key);
}
```

## 说明

0 条评论

• ### 华为面试题——单向链表倒转（一次遍历）

/*     Blog: http://blog.csdn.net/jiangxinnju     function:     将单向链表reverse...

• ### 华为机试001：字符串最后一个单词的长度(华为OJ001)

提交网址： http://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da?tpId=37&...

• ### 记一次面试题getshell

网站首页如下，通过路径得知使用的使用的eShop程序搭建，通过faction.ico图标得知中间件是Apache Tomcat，使用的脚本应该是jsp。

• ### 2015届华为校园招聘机试题

第一题(60分)：        按要求分解字符串，输入两个数M，N；M代表输入的M串字符串，N代表输出的每串字符串的位数，不够补0。例如：输入2,8， “...

• ### 华为2018年校园招聘机试题

这是我上周去面试的地方。很顺利，我觉得——至少我认为我已经尽我所能，并且无论发生什么事情对我都是有帮助的。

• ### 记一次禅道cms测试

最近碰上了一个禅道的cms系统，看了下网上并没有对这个cms比较系统的攻击方法，于是写下此文希望对大家能有所帮助。（公司授权站点，打码严重，万望见谅）

• ### 解Bug之路-记一次对端机器宕机后的tcp行为

机器一般过质保之后，就会因为各种各样的问题而宕机。而这一次的宕机，让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为。经过详细跟踪分析原因之后，发现可以通...