前言
今年6月份换工作的时候,得到了小米的面试机会:面试是在这个平台上:https://www.showmebug.com
感觉这个平台还是不错的,进去之后,面试官已经把要写的代码题放在了这个网站上,于是我就开始了自己的编码,面试官可以实时看到自己的编码过程,还可以在我编码的过程中,输入文字来交流。就相当于在自己背后盯着一样,糟糕,画风不对,有点脊背发凉~~~~~~
题目以及我当时的解题结果如下
// ## 请在下方描述你的面试题内容( 支持Markdown )
import java.util.*
public class TextUtils {
// 计算文本的长度
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 28
public int textSize(String text) {
int length = text.length();
return length;
}
// 文本由空格隔开的小写字母单词组成。计算文本中单词的数量
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 7
public int howManyWords(String text) {
String[] t = text.split(" ");//忘记空格的asci码了(我说)
return t.length;
}
// 文本由空格隔开的小写字母单词组成。计算文本中最常出现的字母的出现次数
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 3
public int mostUsedLetter(String text)
List<char> list = new ArrayList<char>();
char[] t = text.chattoArray();
for (char word : t){
list.add(word);
}
for(char w : list){
for (char word : t){
}
}
} // 没有思路的话可以直接下一题(面试官说)
//
// 文本由空格隔开的小写字母单词组成。将文本中单词按字典排序
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// "am are fine how i thanks you"
public String sortWords(String text) {
if("".equals(text)|| null ==text){
return "";
}
String[] t = text.split(" ");
Map<String,String> map = new HashMap<String ,String>();
String first = "";
for(String str:t){
first = str.substr(0,1);
map.put(first,str);
}
//字母按顺序排序不知道是不是可以用集合的排序方法。
}
// 文本由空格隔开的小写字母单词组成。去掉文本中所有a开头的单词
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// "how you i fine thanks"
public String filterWords(String text) {
if("".equals(text)|| null ==text){
return "";
}
String[] t = text.split(" ");
Map<String,String> map = new HashMap<String ,String>();
String first = "";
for(String str:t){
first = str.substr(0,1);
map.put(first,str);
}
//我忘记Iterator的遍历方法怎么用了,不过思路是,不用for循环去遍历,在遍历的过程中删除aequals(key)的值(我说),今日一想,其实错了。
}
// Ok 你可以语音吗 做题就到这里吧(面试官说)
//等一下,我先去出去一下。 (我说)
// ok(面试官说)
}
可以看到这些题都是比较简单的,但是呢~~~我除了前两道最低级的题做出来了以外,其他的基本全军覆没,太惨了,所以结果当然是我不够格,书到用时方恨少呀,恨自己平时不好好打地基。
现在基本都是框架,有很多基础的内容确实很容易忽略,也后悔在面试的前几个月没有话时间好好做力扣的算法题,这两天工作比较少,就把这次面试题扒拉出来,做一下,最终的成果如下,同学们有兴趣可以自己先做一下,有更好的解题方法可以留言交流。
package com.fanhf.utils;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author fanhf
* @Description 小米的文本处理面试题解题
* @date 2020-11-05 10:56
*/
public class TextUtils {
public static void main(String[] args){
String str = "how are you i am fine thanks";
System.out.println("计算文本的长度:"+textSize(str));
System.out.println("以空格分隔后,计算文本中单词的数量:"+howManyWords(str));
System.out.println("计算文本中最常出现的字母的出现次数:"+mostUsedLetter(str));
System.out.println("将文本中单词按字典排序:"+sortWords(str));
System.out.println("去掉文本中所有a开头的单词:"+filterWords(str));
}
// 计算文本的长度
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 28
public static int textSize(String text) {
int length = text.length();
return length;
}
// 文本由空格隔开的小写字母单词组成。计算文本中单词的数量
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 7
public static int howManyWords(String text) {
String[] t = text.split(String.valueOf((char)32));
return t.length;
}
// 文本由空格隔开的小写字母单词组成。计算文本中最常出现的字母的出现次数
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// 3
public static int mostUsedLetter(String text){
if("".equals(text)|| null ==text){
return 0;
}
String[] str = text.split(String.valueOf((char)32));
List<Character> list = new ArrayList<Character>();
for (int j = 0;j < str.length;j++){
for (int i = 0; i<str[j].length();i++){
list.add(str[j].charAt(i));
}
}
//map中不能存放相同的key
Map<Character, Integer> map = new HashMap<>();
for (Character ch : list){
Integer count = 1;
//map中包含某个字符,计数器就加1
if(null != map.get(ch)){
count = map.get(ch)+1;
}
map.put(ch,count);
}
//这里我用了java8的stream流和Lambda表达式
Optional<Integer> op =
map.values()
.stream()
.collect(
Collectors.maxBy((i1,i2) -> Integer.compare(i1,i2)));
return op.get();
}
//升级版本-20220920更
public static int mostUsedLetterPlus(String text){
if (StringUtils.isBlank(text)) {
return 0;
}
String replace = text.replace(String.valueOf((char) 32), "");
char[] chars = replace.toCharArray();
Map<Character, Integer> maps = Maps.newHashMap();
for (int i = 0; i < chars.length; i++) {
for (int j = i+1; j < chars.length-i; j++) {
if (chars[i] == chars[j]) {
if (!maps.containsKey(chars[i])) {
maps.put(chars[i], 2);
} else {
maps.put(chars[i], maps.get(chars[i]) + 1);
}
}
}
}
return maps.values().stream().max(Comparator.naturalOrder()).get();
//
// 文本由空格隔开的小写字母单词组成。将文本中单词按字典排序
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// "am are fine how i thanks you"
//此题解法来自于:https://blog.youkuaiyun.com/weixin_44084434/article/details/93711748 感谢
public static String sortWords(String text) {
if("".equals(text)|| null ==text){
return "";
}
String[] str = text.split(String.valueOf((char)32));
List<String> list = new ArrayList<>(str.length);
for(int i = 0; i < str.length;i++){
list.add(str[i]);
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
try {
String str1 = new String(o1.toString()
.getBytes("GB2312"),"ISO-8859-1");
String str2 = new String(o2.toString()
.getBytes("GB2312"),"ISO-8859-1");
return str1.compareTo(str2);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return 0;
}
});
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0;i < list.size();i++){
stringBuilder.append(list.get(i)).append(String.valueOf((char)32));
}
return stringBuilder.toString();
}
//升级版本-20220920更
public static String sortWordsPlus(String text) {
if (StringUtils.isBlank(text)) {
return null;
}
String[] str = text.split(String.valueOf((char) 32));
List<String> strings = Lists.newArrayList(Arrays.asList(str));
return strings.stream()
.sorted()
.collect(Collectors.joining(String.valueOf((char) 32)));
}
// 文本由空格隔开的小写字母单词组成。去掉文本中所有a开头的单词
// 样例输入
// "how are you i am fine thanks"
// 样例输出
// "how you i fine thanks"
public static String filterWords(String text) {
if("".equals(text)|| null ==text){
return "";
}
String[] str = text.split(String.valueOf((char)32));
List<String> list = new ArrayList<>(str.length);
for(int i = 0; i < str.length;i++){
if(!str[i].startsWith("a")){
list.add(str[i]);
}
}
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0;i < list.size();i++){
stringBuilder.append(list.get(i)).append(String.valueOf((char)32));
}
return stringBuilder.toString();
}
//升级版本-20220920更
public static String filterWordsPlus(String text) {
if (StringUtils.isBlank(text)) {
return null;
}
String[] str = text.split(String.valueOf((char) 32));
List<String> strings = Lists.newArrayList(Arrays.asList(str));
return strings.stream()
.filter(ele -> !ele.startsWith("a"))
.collect(Collectors.joining(String.valueOf((char) 32)));
}
可以看到里面稍微有点上头的是第4题,但是我当时脑子一团乱麻,就会做1,2题,哎,枉为java人吖,太丢人了。各位看官可不要嫌弃我,我还在修炼中,有朝一日,定会问鼎天花板。。。
-----------------------与君共勉-------------------