【LeetBook】初级算法案例+java代码实现(字符串篇(1))

简介: 【LeetBook】初级算法案例+java代码实现(字符串篇(1))

反转字符串

723a55a939dc4784a23f761f8a13302d.png


代码:

public void reverseString(char[] s) {
    char temp;
    int length=s.length;
    //注意i<length/2,即只需两边交换即可
    for(int i=0;i<length/2;i++){
        temp=s[i];
        s[i]=s[length-1-i];
        s[length-1-i]=temp;
    }
}


整数反转


fcfe3703ac444de98eee984c5fe7fba2.png


代码:

public int reverse(int x) {
    //判断有没有负号
    int flag = x > 0 ? 1 : -1;
    //把符号提出来
    x = Math.abs(x);
    try {
        //将字符串转化之后乘以flag,即还原符号
        return Integer.valueOf(new StringBuffer(String.valueOf(x)).reverse().toString()) * flag;
    } catch (NumberFormatException e) {
        return 0;
    }
}


字符串的第一个唯一字符


9419dcfb19354363902a4f321f68717c.png

代码:

public int firstUniqChar(String s) {
    for (int i = 0; i < s.length(); i++) {
        char t = s.charAt(i);
        //当第一次出现该字符的索引和最后一次出现该字符的索引一致,说明该字符只有一个
        if (s.indexOf(t)==s.lastIndexOf(t)){
            return i;
        }
    }
    //如果上面没有返回,说明字符串的长度为0,或者每一个字符都有重复
    return -1;
}


有效的字母异位词


代码:

public boolean isAnagram(String s, String t) {
    //若长度不相同,肯定使false
    if (s.length() != t.length()) {
        return false;
    }
    char[] sCharArr = s.toCharArray();
    char[] tCharArr = t.toCharArray();
    //数组的下表可以用字符来表示,因为后期会被自动转化为合适的索引
    //其实字符可以通过ASCII编码表转换为数字,而标准ASCII码字符集总共的编码有128个,所以声明数组的长度为128
    int[] temp = new int[128];
    for (char c : sCharArr) {
        temp[c]++;
    }
    for (char c : tCharArr) {
        temp[c]--;
    }
    for (int i = 0; i < temp.length; i++) {
        if (temp[i] != 0) {
            return false;
        }
    }
    return true;
}


验证回文串

代码:


public boolean isPalindrome(String s) {
    if (s.length() == 0) {
        return true;
    }
    //先将字符串的所有字母转化为小写
    s = s.toLowerCase();
    for (int i = 0, j = s.length() - 1;i < j; i++, j--) {
        //跳过不是数字和字母的其他字符
        while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
            i++;
        }
        //跳过不是数字和字母的其他字符
        while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
            j--;
        }
        if (s.charAt(i) != s.charAt(j)) {
            return false;
        }
    }
    return true;
}


字符串转换整数 (atoi)

307a0d877da7441c911bf72fd599ad17.png


57065d70613f44d3860d8d21cb7a7d0e.png


代码:

public int myAtoi(String s) {
    if (s.length() == 0) {
        return 0;
    }
    char[] sCharArr = s.toCharArray();
    int index = 0;
    //读入字符串并丢弃无用的前导空格
    //跳过空格
    while (index<sCharArr.length&&sCharArr[index] == ' ') {
        index++;
    }
    // 字符串为全空格
    if (index == sCharArr.length) {
        return 0;
    }
    //检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
    int flag = 1;
    //如果该字符为'-','+',index++
    if (sCharArr[index] == '-' || sCharArr[index] == '+') {
        if (sCharArr[index++] == '-') {
            flag = -1;
        }
    }
    //读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
    String tempStr = "";
    while (index < sCharArr.length) {
        if (sCharArr[index] < '0' || sCharArr[index] > '9') {
            break;
        } else {
            tempStr += sCharArr[index];
        }
        index++;
    }
    //将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
    //如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
    //返回整数作为最终结果。
    if (tempStr.equals("")){
        return 0;
    }
    try{
        return Integer.valueOf(tempStr)*flag;
    } catch (NumberFormatException e) {
        return flag==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
    }
}

由于小编如今面临苦逼的期末考试,先暂时更新一部分,感兴趣的同学可以上初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)进行进一步的学习。


目录
相关文章
|
4天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
88 60
|
4天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
15 5
Java反射机制:解锁代码的无限可能
|
6天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
31 10
|
1天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
8 2
|
3天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
8 2
|
8天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
19 6
|
8天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
Java
Java中需要注意的一些案例
Java中需要注意的一些案例
118 0