两道华为机考题
来源:互联网 发布:python readlines 编辑:程序博客网 时间:2024/06/08 05:21
题目一:通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
题二:题目描述(40分):
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
思路:过滤,顾名思义也就是将相同的字符过滤掉,过滤剩下的字符都是不同的。那么我们可以新建一个容器用于存放当前过滤剩下的字符,然后每经过一个字符,则把字符与容器中的字符做比较,容器中有一个这样的字符,则过滤掉,反之,则放入容器中。
具体java代码:
public class Charfilter {/** * @param a * @param list * 判断字符是否该放入到list中,如果list中包含有改字符,return false,如果不包含,则return true */public static boolean compare(char a,List<Character> list){//list为空,则表示是第一个字符,肯定放入if (list.isEmpty()) {return true;}for (int i = 0; i < list.size(); i++) {//只要在list中找到一个字符与判断字符相同,则返回falseif (a == list.get(i)) {return false;}}//若都不相同,则返回truereturn true;}/** * @param input * @return String * 字符串过滤器 */public static String Filter(String input){char[] cha = input.toCharArray();List<Character> list = new ArrayList<Character>();//list用于存放过滤后的字符for (int i = 0; i < cha.length; i++) {if(compare(cha[i], list)){list.add(cha[i]);}}//将过滤后的字符串从list取出放入StringBuffer,转String返回StringBuffer out = new StringBuffer();for (int i = 0; i < list.size(); i++) {out.append(list.get(i));}return out.toString();}public static void main(String[] args){Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();String newstr = Filter(str);System.out.println(newstr);scanner.close();}}
题二:题目描述(40分):
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
思路:首先,大体思路还是将压缩后字符串放入到一个新的容器。字符串压缩程序,需要统计相同且位置相邻的字符的数量,所以需要一个计数器,计数器每次开始计数时为1,当字符数量只为1的时候不显示1,大于1则显示。每一轮计数结束后,将统计的数量和被压缩的字符放入到容器中,然后将计数器回到初始值1。整个过程需要注意临界值判断的问题,一不小心就数组越界了。
具体代码:
public class CharCompress {public static String Compress(String str){char[] cha = str.toCharArray();List<String> list = new ArrayList<String>();//用list存放压缩后的字符串for (int i = 0; i < cha.length; i++) {int count = 1; //设置一个计数器,用于计算位置相邻并相同字符的数量//利用while循环来寻找相邻且相同的字符,计算其数量,这里注意数组越界的问题while(i <= cha.length - 2 && cha[i] == cha[i+1]){count++;i++;}//字符数量为1的时候不显示1if (count != 1) {list.add(String.valueOf(count));}list.add(String.valueOf(cha[i]));}//将压缩后的字符串从list取出,放入StringBuffer再转为String返回StringBuffer s = new StringBuffer();for (int i = 0; i < list.size(); i++) {s.append(list.get(i));}return s.toString();}public static void main(String[] args){Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();String newstr = Compress(str);System.out.println(newstr);scanner.close();}}
1 0
- 两道华为机考题
- 华为2014年机考题
- 2014华为机考题笔记
- 华为历年机考题收录
- 简单四则运算--据说是华为机考题
- 华为2013机试考题拉灯泡
- 一道华为机考题(回文数)
- 华为机考题 003明明的随机数
- 华为机考题 004字符串分割
- 华为2015年校招机考题
- 华为2017秋招机考题
- 华为2014暑期实习生招聘机试考题回忆
- 一道华为机考题(统计字符出现次数)
- 华为2015机考题最后一题解法
- 华为机考题-求二叉树的深度
- 华为机考题 002计算字符串中字符的个数
- 应聘华为机试考题实现字符串中子字符串的替换
- 华为2014机考题_判断if括号是否匹配_堆栈
- 工作流总结(二)JBPM 入门示例
- 【Mysql】常用指令之——数据库引擎
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- UGUI基本概念 (待续)
- QCustomPlot之Interaction简单解析
- 两道华为机考题
- Apache SVN配置
- 延迟加载
- 重新注册system32目录下的所有DLL文件
- Floyd-Warshall算法
- 字符串相关的方法的总结
- jade模板-常用标签内容
- C# HTTP状态码
- the file “XXX” could not be opened because you don't have permission to view it