博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 实习生面试题
阅读量:7227 次
发布时间:2019-06-29

本文共 4143 字,大约阅读时间需要 13 分钟。

 

题目要求:                                                                                                                            

如右图所示, 设目录的每一行都是一个String数组的一个元素,                        

缩进次数代表了这个元素所具有的空格个数.

要求实现的功能为生成一个map并输出,

map的key为子章节的名称,

value为父章节的名称,

如若没有父章节那么value = "null"

 

 

举例:

<"1 Introduction","null">

<"1.1 Backgroud","1 Introduction">

<"1.2 Audience","1 Introduction">

...

...

...

 

 

思路: 

看到这道题我的最直观的反映是使用树, 将整个数组建立成一个树, 最后返回所有的父节点-子节点对做为KV值. 虽然是一种解法, 但是整个过程过于复杂. 

后来从面试官出得到的解法是用栈来实现. 由于自己本身的代码量较少, 也没有在实际中应用过栈来解决具体问题, 所以这个方法自己是没有想到的. 

 

从这道题的思路来看, 对于栈的使用时机, 最好是有固定的一种节奏来出现一个个的元素, 并且元素有共同点, 再者就是有个能作为flag数字标记的值, 在本例中这个值就是每个元素前的空格个数了.

 

希望在以后的工作中积累更多使用栈来解决具体问题的经验.

 

 

具体实现:

主函数:

1 import java.util.HashMap;  2 import java.util.Map;  3 import java.util.Stack;  4  5 import org.xml.sax.HandlerBase;  6  7 /**  8  * @author hexor  9  * 10  *         面试题之一 将类似于书籍目录的数组中的元素提取, 并加入一个map结构中 11  * 12  *         例如: 13  *         {"A"," Aa","  Aa1"," Ab","B"," Ba","  Ba1","  Ba2", 14  *         "C"} 15  * 16  *         要求这样的Map: ("A","null") (" Aa","A") ("  Aa1"," Aa") 17  *         (" Ab","A") . . . 18  * 19  *         即: Map的key为子章节的名称, value为父章节的名称, 若没有父章节, 则value为"null" 20  * 21  *         已知规律: 数组元素前面的空格的数量 22  * 23  *         注意: 数组元素中的内容是没有规律的, 并没有第一个字母是大写ABC.., 第二个字母是 小写, 24  *         第三个是数字的规律,只有空格个数是有规律的 25  * 26  * 27  */ 28 public class Test {
29 30 public static
void main(String[] args) {
31 32 // 给出的数组 33 String[] array = new String[] { "A", " Aa", " Aa1", 34 " Ab", "B", " Ba", " Ba1", " Ba2", "C" }; 35 36 Test test = new Test(); 37 MyStack stack = new MyStack(); // 用到的一个自定义的栈 38 Map
map = new HashMap
(); // 需要求得的map 39 40 for (int i = 0; i < array.length; i++) { // 遍历每个元素,并进行操作 41 42 int itemSpace = 0; // 每个元素拥有的空格数 43 itemSpace = test.getSpacesAmount(array[i]); // 获得这个元素的空格数 44 45 /* 46 * 栈为空,说明没有父章节;或者到达新的顶层章节,则清空栈 47 */ 48 if (stack.isEmpty() || itemSpace == 0) {
49 map.put(array[i], "Null"); 50 stack.clear(); 51 stack.push(array[i]); 52 System.out.println(array[i] + "-Null"); 53 continue; 54 } 55 56 /* 57 * 根据这个元素的空格数,与栈中元素比较, 并对栈进行操作 再将元素去掉前置空格后加入map,并输出 58 */ 59 test.stackOperation(stack, itemSpace); 60 map.put(array[i].trim(), stack.peek().trim()); 61 System.out.println(array[i].trim() + "-" 62 + stack.peek().trim()); 63 stack.push(array[i]); 64 65 } 66 67 } 68 69 public int getSpacesAmount(String string) { // 求元素的空格个数 70 return string.lastIndexOf(" ") + 1; 71 } 72 73 public void stackOperation(MyStack stack, 74 int incomeSpacesAmount) {
75 76 int popTimes = stack.getPeekSpaceAmount() 77 - incomeSpacesAmount + 1; 78 for (int i = 0; i < popTimes; i++) {
79 stack.pop(); 80 } 81 } 82 }

自定义栈:

MyStack.java
1 import java.util.Stack;  2  3  4 public class MyStack extends Stack
{
5 6 /** 7 * 自定义能获得栈顶元素空格数的栈 8 */ 9 private static final long serialVersionUID = 1L; 10 11 @Override 12 public boolean empty() {
13 // TODO Auto-generated method stub 14 return super.empty(); 15 } 16 17 @Override 18 public synchronized String peek() {
19 // TODO Auto-generated method stub 20 return super.peek(); 21 } 22 23 @Override 24 public synchronized String pop() {
25 // TODO Auto-generated method stub 26 return super.pop(); 27 } 28 29 @Override 30 public String push(String item) {
31 // TODO Auto-generated method stub 32 return super.push(item); 33 } 34 35 @Override 36 public synchronized int search(Object o) {
37 // TODO Auto-generated method stub 38 return super.search(o); 39 } 40 41 public int getPeekSpaceAmount(){
42 return this.peek().lastIndexOf(" ") + 1; 43 } 44 45 }

转载于:https://www.cnblogs.com/hexor/archive/2012/02/28/2371247.html

你可能感兴趣的文章
Octave 入门
查看>>
深度学习入门:10门免费线上课程推荐
查看>>
React组件设计模式(一)
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
express + mock 让前后台并行开发
查看>>
30天自制操作系统-2
查看>>
小程序开发之路(一)
查看>>
Odoo domain写法及运用
查看>>
JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
查看>>
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>
面试题:给你个id,去拿到name,多叉树遍历
查看>>
go append函数以及写入
查看>>
关于Java中分层中遇到的一些问题
查看>>
配置 PM2 实现代码自动发布
查看>>
android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
查看>>
iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
查看>>
诡异!React stopPropagation失灵
查看>>
Python_OOP
查看>>
个人博客开发系列:评论功能之GitHub账号OAuth授权
查看>>
mongodb--安装和初步使用教程
查看>>