DAY2 回文数+HashMap+String删除指定字符串

文章介绍了三种不同的Java方法来检测回文数,包括反转字符串、反转数字以及反转一半数字,同时详细讲解了HashMap的基本操作,如添加、访问、删除元素以及遍历。还提到了String删除指定字符串和位置字符的方法。
摘要由CSDN通过智能技术生成

文章目录

前言

一、回文数

方法1:反转字符串

方法2:反转数字

方法3:反转一半数字

二、HashMap

简介

引入HashMap类,并创建对象

添加元素—— put() 方法

访问元素—— get(key) 方法

删除元素—— remove(key) 方法

删除所有键值对(key-value) —— clear() 方法

计算元素数量—— size() 方法

迭代 HashMap —— for-each

三、String删除指定字符串


前言

4.3 LeetCode9-回文数 + LeetCode13-罗马数字转整数


一、回文数

方法1:反转字符串

思路:将数字转换为字符串,并检查字符串是否为回文。

问题:需要额外的非常量空间来创建问题描述中所不允许的字符串。

    // 方法1:反转字符串
    public boolean isPalindrome(int x) {
        String s1 = "" + x;
        String s2 = "";
        for (int i = s1.length() - 1; i >= 0; i--) {
            s2 += s1.charAt(i);
        }
        if(s1.equals(s2)) {
            return true;
        } else {
            return false;
        }
    }

方法2:反转数字

思路:将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文数。

问题:如果反转后的数字大于 int.MAX,我们将遇到整数溢出问题。

    // 方法2:反转数字
    public boolean isPalindrome(int x) {
        if (x < 0) return false;
        int cur = 0;
        int num = x;
        while (num != 0) {
            cur = cur * 10 + num % 10;
            num /= 10;
        }
        return x == cur;
    }

方法3:反转一半数字

思路:按照第二个想法,为了避免数字反转可能导致的溢出问题,考虑只反转 int 数字的一半。如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。

问题:如果反转后的数字大于 int.MAX,我们将遇到整数溢出问题。

例如,输入 1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。

    // 方法3:反转一半数字
    public boolean isPalindrome(int x) {
        if (x < 0 || (x%10 == 0 && x != 0)) return false;
        int cur = 0;
        int num = x;
        while (num > cur) {
            cur = cur * 10 + num % 10;
            num /= 10;
        }
        return num == cur || num == cur/10;
    }

注意 :需考虑到 0 和末位数字为0(如10)的情况。


二、HashMap

简介

  • HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
  • HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
  • HashMap 是无序的,即不会记录插入的顺序。
  • HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

  • HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。

  • HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

        基本类型对应的包装类表如下:

基本类型引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

引入HashMap类,并创建对象

整型(Integer)的 key 和字符串(String)类型的 value

    import java.util.HashMap; // 引入 HashMap 类
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

添加元素—— put() 方法

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");

访问元素—— get(key) 方法

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();    

    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    System.out.println(Sites.get(3));

    // 输出结果为 
    Taobao

删除元素—— remove(key) 方法

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    Sites.remove(4);
    System.out.println(Sites);

    // 输出结果为
    {1=Google, 2=Runoob, 3=Taobao}

删除所有键值对(key-value) —— clear() 方法

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    Sites.clear();
    System.out.println(Sites);
    
    // 输出结果为
    {}

计算元素数量—— size() 方法

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();

    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    System.out.println(Sites.size());

    // 输出结果为
    4

迭代 HashMap —— for-each

如果只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value;如果只想获取 value,可以使用 values() 方法。

    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    
    // 输出 key 和 value
    for (Integer i : Sites.keySet()) {
        System.out.println("key: " + i + " value: " + Sites.get(i));
    }
    // 返回所有 value 值
    for(String value: Sites.values()) {
        // 输出每一个value
        System.out.print(value + ", ");
    }

    // 输出结果为
    key: 1 value: Google
    key: 2 value: Runoob
    key: 3 value: Taobao
    key: 4 value: Zhihu
    Google, Runoob, Taobao, Zhihu,

三、String删除指定字符串

    str = str.replace("指定字符串", "");

四、String删除指定位置字符

由于 Java String 中没有删除元素的方法,所以可采用 substring 方法,截取掉 i 前面和 i 后面的元素,用 String Builder 或 Buffer 来接收截取的字符串。

    int len = s.length();
    String res = "";

    // 删除字符串s中第j位的字符
    for (int j = 0; j < len; j++) {
        StringBuilder sb = new StringBuilder();
        sb.append(s.substring(0, j));
        sb.append(s.substring(j+1, len));
        res = sb.toString();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值