前两天看到有人在发Google实习生招聘题,自己手痒也实现了一个。
原帖地址:http://www.blogjava.net/andyelvis/archive/2009/04/14/265496.html
原题:
要求:写一个函数void count(char* input,int len),此函数的功能是计算出一个字符串中每个字符的个数,不区分大小写,输出结果时按字符在字符串中出现的先后顺序。使用程序语言不限。
例如:input="abCc*b",输出结果是a:1 b:2 c:2 *:1
1
import
static
java.lang.System.out;
2
import
org.junit.Test;
3
4
/**
5
* 一道Google2009夏季实习生招聘笔试程序设计题
6
* 要求:写一个函数void count(char* input,int len),此函数的功能是计算出一个字符串中每个字符的个数,不区分大小写,输出结果时按字符在字符串中出现的先后顺序。使用程序语言不限。
7
* 例如:input="abCc*b",输出结果是a:1 b:2 c:2 *:1
8
*
@author
Johny Huang
9
* @date 2009-4-14
10
*/
11
public
class
TestCountChar {
12
13
public
static
class
BNode{
14
private
BNode left;
15
private
BNode right;
16
private
int
count;
17
private
char
character;
18
19
public
BNode(
char
c,
int
count){
20
this
.character
=
c;
21
this
.count
=
count;
22
}
23
public
char
getCharacter() {
24
return
character;
25
}
26
public
void
setCharacter(
char
character) {
27
this
.character
=
character;
28
}
29
public
BNode getLeft() {
30
return
left;
31
}
32
public
void
setLeft(BNode left) {
33
this
.left
=
left;
34
}
35
public
BNode getRight() {
36
return
right;
37
}
38
public
void
setRight(BNode right) {
39
this
.right
=
right;
40
}
41
42
public
int
getCount() {
43
return
count;
44
}
45
public
void
setCount(
int
count) {
46
this
.count
=
count;
47
}
48
public
void
addOne(){
49
this
.count
++
;
50
}
51
}
52
53
@Test
54
public
void
test(){
55
char
[] input
=
"
fbagcdagaddddgFBAGCDAGADDDDG
"
.toCharArray();
56
count(input,input.length);
57
}
58
59
/**
60
*
61
*
@param
input 传入的字符数组
62
*
@param
len 需要处理的长度
63
*/
64
public
void
count(
char
[] input,
int
len){
65
/*
66
* 主要思想是用一个二叉树来存储字符,这样可以减少字符对比的次数(至少减少一半),
67
* 另外再用一个数组(或链表)来保存字符的顺序。
68
*/
69
70
//
校验参数
71
if
(input
==
null
){
72
return
;
73
}
74
if
(len
<
1
||
input.length
<
1
){
75
return
;
76
}
77
78
int
length
=
len;
79
if
(len
>
input.length){
80
length
=
input.length;
81
}
82
//
拷贝一个小写的字符数组
83
char
[] inputCopy
=
new
char
[length];
84
for
(
int
i
=
0
;i
<
length;i
++
){
85
inputCopy[i]
=
Character.toLowerCase(input[i]);
86
}
87
88
//
取第一个字符作为根节点
89
BNode root
=
new
BNode(inputCopy[
0
],
1
);
90
//
将当前节点设为根节点
91
BNode current
=
root,temp;
92
93
//
申请一个节点数组来保存字符顺序,当然也可以用List来保存
94
BNode[] charSeq
=
new
BNode[length];
95
charSeq[
0
]
=
root;
96
//
charSeq数组的下标(索引)
97
int
charSeqIndex
=
1
;
98
char
curChar;
99
100
//
从第二个字符开始遍历字符数组
101
for
(
int
i
=
1
;i
<
length;i
++
){
102
curChar
=
inputCopy[i];
103
while
(
true
){
104
//
如果字符与当前节点字符相同,则累加1
105
if
(curChar
==
current.getCharacter()){
106
current.addOne();
107
break
;
108
}
else
{
109
if
(curChar
<
current.getCharacter()){
110
//
如果字符小于当前节点字符,则转向左子节点对比
111
if
(current.getLeft()
==
null
){
112
//
左子节点为空,则加入新的节点
113
temp
=
new
BNode(curChar,
1
);
114
current.setLeft(temp);
115
//
将节点引用保存到数组
116
charSeq[charSeqIndex]
=
temp;
117
charSeqIndex
++
;
118
break
;
119
}
120
current
=
current.getLeft();
121
}
else
{
122
//
如果字符大于当前节点字符,则转向右子节点对比
123
if
(current.getRight()
==
null
){
124
temp
=
new
BNode(curChar,
1
);
125
current.setRight(temp);
126
charSeq[charSeqIndex]
=
temp;
127
charSeqIndex
++
;
128
break
;
129
}
130
current
=
current.getRight();
131
}
132
}
133
}
134
//
将当前节点指向根节点
135
current
=
root;
136
}
137
138
for
(BNode node:charSeq){
139
out.print(node.getCharacter()
+
"
:
"
+
String.valueOf(node.getCount())
+
"
"
);
140
}
141
}
142
143
}
主要是通过二叉树来保存字符,从而减少对比的次数来达到优化。因为想到很多面试题目都不给用泛型,所以这里都用数组实现了。
分享到:
相关推荐
腾讯2013实习生招聘笔试试题,2013年4月13日刚刚出炉的,相比2012年简单一些。
2014年广东移动领先100实习生招聘笔试题目,高清拍摄照片
腾讯实习生招聘笔试真题是众多求职者关注的焦点,尤其是对于希望进入IT行业的大学生和初级开发者来说,了解这些真题可以提供宝贵的准备材料。腾讯作为中国互联网巨头之一,其招聘流程严谨,笔试环节通常涉及多方面的...
在2011年百度的暑期实习生招聘中,web前端开发的笔试题主要涉及JavaScript基础知识、HTTP状态码理解和算法设计,以及系统设计实践。这些题目旨在考察应聘者的编程基础、网络知识以及解决问题的能力。 首先,关于...
2013阿里巴巴实习生招聘笔试题目,图像清晰,题目完整,获得阿里offer必备!
### 百度2012年实习生招聘笔试试题解析 #### 技术类笔试题解析 ##### 题目一解析:兄弟单词查找算法设计 **题目背景**: 本题要求实现一个算法,用于在给定的字典中找出与用户输入的单词互为“兄弟”的所有单词。...
程序设计实习考试试题主要涉及了面向对象编程中的关键概念,如抽象类、构造函数与析构函数、函数模板、访问修饰符、动态内存管理、成员函数特性、运算符重载、类模板及派生类等知识点。以下是这些知识点的详细说明:...
百度2012实习生校园招聘机器学习数据挖掘笔试试题,花了很多时间才找到的
【腾讯2012实习生试题(技术运营)】是一份针对有意加入腾讯技术运营岗位的实习生的考核资料,反映了当时腾讯对于技术运营实习生的能力要求和期望。这份试题可能包括了多方面的问题,旨在考察候选人的技术理解、问题...
2014年3月29日晚6:30-8:30,阿里巴巴集团2014实习生统一笔试题,试题很灵活,开放性很大。
2015年趋势科技实习生招聘笔试题。希望对找实习的人有用
全国计算机等级考试二级笔试试卷Java语言程序设计试题
2014.3.29 地点在北航 大家可以参考参考
【标题】"2009年专升本考试C程序设计试题与答案"涉及的是针对专升本学生的C语言编程考试。C语言是计算机科学的基础编程语言,它以其高效、灵活和广泛的应用而受到重视。在专升本考试中,C程序设计通常包括对基本语法...
但我可以根据“微软2013实习生招聘笔试题”这一标题,推测可能涉及的知识点,并结合“微软”、“2013”、“实习生”、“招聘”、“笔试题”等标签,给出一些可能在微软笔试中出现的IT知识点。 1. 计算机科学基础 ...
C语言程序设计期末考试试题(含答案), C语言程序设计期末考试试题(含答案)
2014年3月29日。阿里巴巴实习生笔试题
(完整版)小学美术教师招聘考试试题与答案.pdf 2015小学美术教师招聘考试试题及答案(2套).pdf 2016年天津市教师公开招聘考试(小学美术)真题试卷.pdf 2017年福建省教师招聘考试笔试美术小学学段真题答案解析分析.pdf ...
2015阿里巴巴实习生招聘2015年4月2日在线笔试题,我投的研发Java岗,不过选择题没有单独考察Java的知识点,倒是有几题C++题目,看来选择题只是随机从题库生成,而且阿里的题库并没有多少考JAVA的选择题
腾讯作为中国互联网巨头之一,其每年的校园招聘都备受瞩目,尤其是实习生项目,为在校学生提供了宝贵的实践机会。2010年的实习生笔试题代表了当时腾讯对技术人才的需求和期望,同时也反映了那个时期的IT行业趋势和...