华为机试准备刷题第二天

密码合格性校验HJ20

正则表达式匹配
在这里插入图片描述

2.删除字符串中出现次数最少的字符HJ23

使用了hashmap, 增强for循环,构建字符串Stringbuilder及append()方法。

import java.util.Scanner;
import java.util.HashMap;
import java.util.Set;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            //将字符串放入hashmap中
            String str = in.next();
            HashMap<Character, Integer> map = new HashMap<>();
            char[] cc = str.toCharArray();
            for(char c : cc){
                if(map.containsKey(c)){
                    map.put(c,map.get(c)+1);
                }else{
                    map.put(c,1);
                }
            }
			//得到出现次数最少的字符串
            int min = 20;
            for(char c : map.keySet()){
                if(map.get(c) < min){
                    min = map.get(c);
                }
            }
			//不采用删除,而是重新构建字符串
            StringBuilder builder = new StringBuilder();
            for(char c : cc){
                if(map.get(c) > min){
                    builder.append(c);
                }
            }
            System.out.println(builder);
        }     
    }
}

3.整数与IP地址的转换HJ33

  1. 整数转ipv4
    1. 方法一:我的方法
    整数字符串转成long类型
    long类型转成二进制字符串形式
    二进制字符串截取转成int类型
    打印拼接结果
    3. 方法二:借鉴方法
  2. ipv4转整数
    1. 方法一:我的方法
    根据“.”将Ipv4形式的字符串分割开;split(“\.”)
    每个字符串转int类型
    int类型转二进制并且前面空位补0,存放进数组
    最后将二进制数组转long类型。
    2. 方法二:借鉴方法-使用了Java提供进制转换和字符串转换的API
    根据“.”将Ipv4形式的字符串分割开;split(“\.”)
    每个字符串转int类型 Integer.parseint(str)
    int类型转二进制字符串并且前面空位补0,存放进数组Integer.fomat(%8s) ,Integer.toBinaryString(str).replace(’ ',‘0’);
    最后将二进制字符串转long类型。Long.parseint(format);
import java.util.*;
import java.util.regex.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            //Pattern p =
                //Pattern.compile("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}25[0-5]|2[0-4][0-9][01]?[0-9][0-9]?");
            if (str.contains(".")) { //Ipv4->int
                String[] s = str.split("\\.");//IP分隔符分开
                int[] num = new int[32];    //存放二进制
                int index = 0;
                long res = 0;
                for (int i = 3; i >= 0; i--) {
                    int n = Integer.parseInt(s[i]);
                    while (n != 0) {              //一个IP分段的十进制转二进制存入数组中
                        num[index++] = n % 2;
                        n /= 2;
                    }
                    while (index < 8 * (4 - i)) { //前面补0
                        num[index++] = 0;
                    }
                }
                for (int i = 0; i < 32; i++) {    //二进制转十进制
                    res += num[i] * Math.pow(2, i);
                }
                System.out.println(res);
            } else { //int->ipv4
                long[] num = new long[32];
                int index = 0;
                long n = Long.valueOf(str);
                while (n != 0) {
                    num[index++] = n % 2;
                    n /= 2;
                }
                while (index < 32) {
                    num[index++] = 0;
                }
                int[] res = new int[4];  //存放IP地址的每个分段
                int result;
                index = 0;
                for (int i = 0; i < 4; i++) {
                    result = 0;
                    for (int j = 0; j < 8; j++) {
                        result += num[index++] * Math.pow(2, j);
                    }
                    res[i] = result;
                }
                System.out.printf("%d" + "." + "%d" + "." + "%d" + "." + "%d\n", res[3], res[2],
                                  res[1], res[0]);
            }
        }
    }
}
import java.util.*;
import java.util.regex.*;
/*
这是方法二:
逻辑更加规范
使用了java自带的API 简化了代码量,
包括字符串转int,十进制转二进制字符串(指定8位,空位用0补),字符串的拼接,二进制的字符串转十进制。
包括字符串转长整型,长整型转二进制字符串(指定32位,空位用0补),字符串的截取,字符串转十进制。
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            if (str.contains(".")) { //Ipv4->int
                Ipv4TurnLong(str);
            } else {                 //int->ipv4
                LongTurnIpv4(str);
            }
        }
    }
    private static void Ipv4TurnLong(String str) {
        String[] s = str.split("\\.");
        String binary = "";
        for(String ss:s){
            String format = String.format("%8s",Integer.toBinaryString(Integer.parseInt(ss))).replace(' ','0');
            binary = binary.concat(format);
        }
        System.out.println(Long.parseLong(binary,2));
    }

    private static void LongTurnIpv4(String str) {
        int[] res = new int[4];
        String binaryString = String.format("%32str",Long.toBinaryString(Long.parseLong(str))).replace(' ','0');
        for(int i=0;i<4;i++){
            res[i] = Integer.parseInt(binaryString.substring(i*8,(i+1)*8),2);
        }
        System.out.printf("%d.%d.%d.%d",res[0],res[1],res[2],res[3]);
    }
}

总结:

  1. 学习了正则表达是匹配【密码和IP地址匹配】
  2. java自带API包括进制转换,字符串转换。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
108题中有部分题目重合,因此么有收录在压缩文件中。 华为机试 ├─001 字符串最后一个单词长度 │ └─Source ├─002 计算字符个数 │ └─Source ├─003 明明的随机数 │ └─Source ├─004 字符串分隔 │ └─Source ├─005 进制转换 │ └─Source ├─006 质数因子 │ └─Source ├─007 取近似值 │ └─Source ├─008 合并表记录 │ └─Source ├─009 提取不重复的整数 │ └─Source ├─010 字符个数统计 │ └─Source ├─011 数字颠倒 │ └─Source ├─012 字符串反转 │ └─Source ├─013 句子逆序 │ └─Source ├─014 字典序排序 │ └─Source ├─015 求int型正整数在内存中存储是1的个数 │ └─Source ├─016 购物单 │ ├─Debug │ ├─Source │ │ └─Debug │ ├─Source - 时间优先 │ │ └─Debug │ └─Source - 空间优先 │ ├─Debug │ └─Release ├─017 坐标移动 ├─018 识别IP地址分类统计 │ └─Source │ └─Debug ├─019 错误记录 ├─020 密码验证合格程序 ├─021 密码破解 ├─023 删除字符串中出现次数最少字符 │ └─Source │ └─Debug ├─024 合唱队 │ └─Source │ ├─Debug │ └─Release ├─025 数据分类处理 │ └─Source │ └─Debug ├─026 查找兄弟单词 │ └─Source │ └─Debug ├─027 素数伴侣 │ └─Source │ └─Debug ├─028 字符串合并处理 │ └─Source │ └─Debug ├─030 密码截取(查找最长回文字符串) ├─031 蛇形矩阵 │ └─Source │ └─Debug ├─033 判断IP是否属于同一子网 │ └─Source │ └─Debug ├─034 称砝码 │ └─Source │ └─Debug ├─035 学英语 │ └─Source │ └─Debug ├─036 迷宫问题 │ └─Source │ └─Debug ├─037 数独问题 │ └─Debug ├─038 名字漂亮度 │ └─Source │ └─Debug ├─039 字符串截取 │ └─Source │ └─Debug ├─040 单链表删除数据 │ └─Source │ └─Debug ├─041 多线程 │ └─Source │ ├─Backup │ ├─Debug │ │ └─041.tlog │ └─Release │ └─041.tlog ├─042 表达式计算 │ └─Source │ └─Debug ├─043 计算字符串距离 │ └─Source │ └─Debug ├─044 杨辉三角形变形 ├─046 挑7 ├─047 完全数 │ └─Debug ├─048 高精度加法 ├─049 输出n个数中最小的k个 │ └─Debug ├─050 找出字符串只出现一次的字符 │ └─Debug ├─051 组成一个偶数最接近的2个质数 │ └─Debug ├─052 M个苹果放入N个盘子 ├─053 查找整数二进制中1的个数 ├─054 DNA子串 ├─055 MP3光标位置 │ └─Source │ └─Debug ├─056 查找2个字符串最大相同子串 │ └─Debug ├─057 配置文件恢复 │ └─Source │ └─Debug ├─058 24点计算 │ └─Debug ├─059 成绩排序 ├─060 矩阵相乘 ├─061 矩阵乘法次数计算 ├─062 字符串通配符 │ └─Debug ├─066 命令行解析 │ └─Source │ └─Debug ├─067 最大相同子串长度 │ └─Debug ├─068 火车编号进站 │ └─Debug ├─072 数组合并 ├─074 埃及分数 │ └─Source │ └─Debug ├─076 密码截取 │ └─Source ├─077 求最大连续bit数 ├─078 密码强度 ├─079 扑克牌大小 │ └─Source │ └─Debug ├─081 合法IP ├─082 棋盘格子走法 ├─083 在字符串中找出连续最长数字串 ├─084 int数组分组,两组和相等 │ └─Source │ └─Debug ├─086 人民币转换 │ └─Source │ └─Debug ├─087 表示数字 ├─090 自动售货系统 │ └─Source │ └─Debug └─091 24点输出 └─Debug

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值