【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)进行进一步的学习。


目录
相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
231 0
|
3月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
194 26
|
3月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
151 6
|
3月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
382 108
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
161 8
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
169 8
|
3月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
724 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
3月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
242 14
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
222 2
|
3月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
132 1