华为面试题——压缩字符串
题目:
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
分析:
将输入字符串拆分成多段,连续相同的字符串归为一段。
用标志位记录游标的位置,是指指向每一段字符串的第一个字母,如果后面字符跟它相同,则sameNum+1;如果不同,则标志位+1。
如果sameNum的值为1,表示一个字符相同,则只输出该字符,flag+1;否则,表示多个字符相同,则输出相同数量和该字符,flag+2。
注意:输出相同字符数量时,要进行ASCII码转换!
算法代码:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{int sameNum = 1;int outputFlag = 0;for (int i = 0; i < lInputLen; ++i) {if (pInputStr[i+1] == pInputStr[i]) {sameNum++;}else{if (1 == sameNum) {pOutputStr[outputFlag] = pInputStr[i];outputFlag++;}else{pOutputStr[outputFlag] = char(sameNum+48);pOutputStr[outputFlag+1] = pInputStr[i];outputFlag += 2;sameNum = 1;}}}
}
测试代码:
//
// main.cpp
// stringZip
//
// Created by Jiajie Zhuo on 2017/4/1.
// Copyright © 2017年 Jiajie Zhuo. All rights reserved.
//#include <iostream>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);int main(int argc, const char * argv[]) {long lInputLen;cout << "Please enter the lInputLen: ";cin >> lInputLen;char *pInputStr = new char[lInputLen];char *pOutputStr = new char[lInputLen];cout << "Please enter the LnputStr: ";cin >> pInputStr;stringZip(pInputStr, lInputLen, pOutputStr);cout << "OutputStr is: ";cout << pOutputStr << endl;return 0;
}
考察了对字符串操作的掌握情况,还有游标的灵活使用。
华为面试题——压缩字符串相关推荐
- 牛客网华为机试题(JavaScript)
最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...
- 【华为机试题分析】 4 字符串分割
我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...
- 【leetcode】第394题:字符串解码(华为笔试题)
题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...
- 华为电脑c语言总是错误,关于华为机试题求代码!解决方法
关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...
- 【牛客网】华为机试题(00、C++版本)
华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...
- C语言面试题大汇总之华为面试题 Eddy整理
1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...
- 华为机试题库+题解【C语言版】
文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...
- 华为机试python编程题_牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 【华为机试题分析-C/C++】知识点分类总结
专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...
- 细节决定成败!华为面试题库刷题整理(三)
写在前面 华为面试题库刷题第三次整理. 203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, ...
最新文章
- 在Mybatis3开发中与配置相关的7点体会
- golan web扫雷
- 有些话不知道怎么说才好
- c语言指针字符串逆序存放,C语言指针实现字符串的反转
- SSM框架下log4j的配置和使用
- uniapp 开发基础环境搭建和配置
- 关闭ie烦人的提示信息
- linux 下pycharm 无法输入中文
- web安全day10:通过实验理解windows域的OU和GPO
- java数据类型int_java数据类型
- 新版gsp计算机系统全套资料,新版GSP对计算机系统的需求表
- Emulex着眼数据中心LAN与SAN的聚合
- 驾驶证体检医院(114---2 挂对应的医院司机体检)
- python爬虫之QQ空间登陆获取信息(超级详细)
- 解决Win7系统安装时缺少驱动
- python里str什么意思_python中str是什么意思
- c语言程序负数,C程序,检查数字是正数还是负数
- 小记Android Gradle插件 Iven 记于 20190522 药厂
- 程序员兼职可以从什么平台接私活?你值得知道!!!
- android 放大镜 Magnifier 简单实现