牛客在线编程-华为机试-简单

本文介绍了多个关于字符串处理和简单算法的应用,如计算字符串最后一个单词的长度、字符出现次数、字符串分隔、进制转换、质数因子、合并表记录、字符个数统计等。此外,还涉及到了字符串反转、数字颠倒、字符串排序、求int型正整数的1的个数等。文章通过实例展示了如何使用Java实现这些功能。
题号 题目 知识点 难度 通过率
HJ1 字符串最后一个单词的长度 字符串 简单 32.49%
HJ2 计算某字符出现次数 字符串 哈希 简单 30.43%
HJ4 字符串分隔 字符串 简单 28.60%
HJ5 进制转换 字符串 简单 33.28%
HJ6 质数因子 排序 简单 27.01%
HJ8 合并表记录 简单 35.02%
HJ10 字符个数统计 字符串 哈希 简单 47.31%
HJ11 数字颠倒 字符串 简单 58.51%
HJ12 字符串反转 字符串 简单 59.14%
HJ13 句子逆序 数组 简单 40.02%
HJ14 字符串排序 字符串 排序 简单 41.54%
HJ15 求int型正整数在内存中存储时1的个数 位运算 简单 57.06%
HJ21 简单密码 字符串 模拟 简单 41.47%
HJ22 汽水瓶 模拟 简单 28.19%
HJ23 删除字符串中出现次数最少的字符 字符串 哈希 简单 33.23%
HJ31 单词倒排 字符串 排序 简单 24.03%
HJ34 图片整理 字符串 排序 简单 46.95%
HJ35 蛇形矩阵 数组 简单 43.86%
HJ37 统计每个月兔子的总数 排序 简单 43.87%
HJ40 统计字符 字符串 哈希 简单 44.43%
HJ51 输出单向链表中倒数第k个结点 链表 双指针 简单 26.49%
HJ53 杨辉三角的变形 基础数学 简单 48.85%
HJ54 表达式求值 字符串 栈 基础数学 简单 56.06%
HJ56 完全数计算 基础数学 简单 50.33%
HJ60 查找组成一个偶数最接近的两个素数 穷举 基础数学 简单 44.77%
HJ61 放苹果 递归 动态规划 简单 47.80%
HJ62 查找输入整数二进制中1的个数 位运算 简单 50.24%
HJ72 百钱买百鸡问题 简单 50.25%
HJ73 计算日期到天数转换 字符串 简单 42.46%
HJ76 尼科彻斯定理 基础数学 简单 46.29%
HJ80 整型数组合并 数组 哈希 排序 简单 34.02%
HJ81 字符串字符匹配 字符串 哈希 简单 31.83%
HJ83 二维数组操作 数组 简单 30.56%
HJ84 统计大写字母个数 字符串 简单 43.80%
HJ85 最长回文子串 字符串 穷举 简单 40.91%
HJ86 求最大连续bit数 位运算 简单 45.56%
HJ87 密码强度等级 字符串 模拟 简单 32.74%
HJ91 走方格的方案数 动态规划 基础数学 简单 47.52%
HJ94 记票统计 哈希 简单 29.77%
HJ96 表示数字 字符串 模拟 简单 33.74%
HJ97 记负均正 数组 简单 22.04%
HJ99 自守数 简单 39.10%
HJ100 等差数列 基础数学 简单 40.99%
HJ102 字符统计 字符串 哈希 排序 简单 31.74%
HJ106 字符逆序 字符串 简单 45.10%
HJ108 求最小公倍数 递归 基础数学 简单 37.30%
1.字符串最后一个单词的长度
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] s = str.split(" ");
        int length = s[s.length - 1].length();
        System.out.println(length);
    }
}
2.计算某字符出现次数
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner s = new Scanner(System.in);
        String input1= s.nextLine();
        String input2 = s.nextLine();
        String res = input1.toLowerCase().replaceAll(input2.toLowerCase(), "");
        System.out.println(input1.length() - res.length());
    }
}
3.字符串分隔
public class Main{
   
   
    public static void main(String[] args){
   
   
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
   
   
            String str = sc.nextLine();
            StringBuilder sb = new StringBuilder();//牢记字符串缓冲区的建立语法
            sb.append(str);//字符串缓冲区的加入
            int addZero = 8 - str.length() % 8;//addzero的可能值包括8
            while((addZero > 0)&&(addZero<8)){
   
   //注意边界调节,避免addzero=8
                sb.append("0");//使用‘’或“”都可
                addZero--;
            }
            String str1 = sb.toString();
            while(str1.length()>0){
   
   
                System.out.println(str1.substring(0,8));
                str1 = str1.substring(8);
            }
        }
    }
}
4.进制转换
public class Main {
   
   
  private final static int BASE = 16;
  private static Map<Character, Integer> map = new HashMap<Character, Integer>()
  {
   
   {
   
   
      put('0', 0);
      put('1', 1);
      put('2', 2);
      put('3', 3);
      put('4', 4);
      put('5', 5);
      put('6', 6);
      put('7', 7);
      put('8', 8);
      put('9', 9);
      put('A', 10);
      put('B', 11);
      put('C', 12);
      put('D', 13);
      put('E', 14);
      put('F', 15);
      put('a', 10);
      put('b', 11);
      put('c', 12);
      put('d', 13);
      put('e', 14);
      put('f', 15);
  }};

  public static int getDecimal(String number) {
   
   
      int res = 0;
      for (char ch : number.toCharArray()) {
   
   
          res = res * BASE + map.get(ch);
      }
      return res;
  }

  public static void main(String[] args) {
   
   
      Scanner in = new Scanner(System.in);
      while (in.hasNext()) {
   
   
          String number = in.next();
          int res = getDecimal(number.substring(2));
          System.out.println(res);
      }
  }
}
5.质数因子
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner scanner = new Scanner(System.in);
        long num = scanner.nextLong();
        long k = (long) Math.sqrt(num);
        for (long i = 2; i <= k; ++i) {
   
   
            while (num % i == 0) {
   
   
                System.out.print(i + " ");
                num /= i;
            }
        }
        System.out.println(num == 1 ? "" : num + " ");
    }
}
6.合并表记录
public class Main{
   
   
    public static void main(String[] args) throws Exception{
   
   
        Scanner sc = new Scanner(System.in);
        TreeMap<Integer, Integer> map = new TreeMap<>(); // 输出结果要求有序!
       while(sc.hasNextInt()){
   
   
            int n = sc.nextInt();
            for(int i = 0; i < n; ++i){
   
   
                int a = sc.nextInt();
                int b = sc.nextInt();
                map.put(a,map.getOrDefault(a,0) + b);
            }
       }
       for (Integer i : map.keySet()) {
   
   
           System.out.println(i + " " + map.get(i));
       }
    }
}
7.字符个数统计
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner in=new Scanner(System.in);
        String str=in.next();
        HashSet<Character> hs=new HashSet<>();
        for(int i=0;i<str.length();i++)
            hs.add(str.charAt(i));
        System.out.println(hs.size());
    }
}
8.数字颠倒
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner in = new Scanner(System.in);
        String str = String.valueOf(in.nextInt());
        StringBuffer strb = new StringBuffer(str);
        strb.reverse();
        System.out.println(strb.toString());
    }
}
9.字符串反转
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        StringBuilder strb = new StringBuilder(str);
        strb.reverse();
        System.out.println(strb.toString());
    }
}
10.求int型正整数在内存中存储时1的个数
public class Main{
   
   
    public static void main(String[] args){
   
   
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();    //读取数字
        int n = 0;    //计数变量
        for(int i=0; i<32; i++) {
   
   
            if ((num & 1) == 1) {
   
   
                n++;
            }
            num = num >>> 1;
        }
        System.out.println(n);
    }
}
11.简单密码
public class Main {
   
   
    private static Map<String, String> map = new HashMap<String, String>() {
   
   
        {
   
   
            put("a", "2");
            put("b", "2");
            put("c", "2");
 
            put("d", "3");
            put("e", "3");
            put("f", "3");
 
            put("g", "4");
            put("h", "4");
            put("i", "4");
 
            put("j", "5");
            put("k", "5");
            put("l", "5");
 
            put("m", "6");
            put("n", "6");
            put("o", "6");
 
            put("p", "7");
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phial03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值