记一次小米在线编程面试

前言

今年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(01);
              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(01);
              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人吖,太丢人了。各位看官可不要嫌弃我,我还在修炼中,有朝一日,定会问鼎天花板。。。

-----------------------与君共勉-------------------

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值