双非二本找工作前的准备day13

学习目标:

每天复习代码随想录上的题目1-2道算法(时间充足可以继续)

今日碎碎念:

1)断更了很久是因为找到了实习,才刚稳定下来的。

2)也是慢慢调整好了自己,带着疑问去实习,能让我有东西在未来和面试官去交谈。


力扣刷题

算法

力扣541:541. 反转字符串 II

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        int len = ch.length;
        for(int i = 0;i<len;i+=2*k){
            int start = i;
            //根据条件判断:因为每次是i+=2*k,所以只需要判断是否靠近末尾即可
            //也就是是否已经大于长度,取最小即可
            int end = Math.min(len-1,start+k-1);
            while(start < end){
                char temp = ch[start];
                ch[start] = ch[end];
                ch[end] = temp;
                start++;
                end--;
            }
        }
        return new String(ch);
    }
}

 力扣151:151. 反转字符串中的单词

class Solution {
    /**
     * 不使用Java内置方法实现
     * <p>
     * 1.去除首尾以及中间多余空格
     * 2.反转整个字符串
     * 3.反转各个单词
     */
    public String reverseWords(String s) {
        //去除空格
        StringBuilder sb = removeSpace(s);
        //翻转整个字符串
        reverseString(sb, 0, sb.length() - 1);
        //然后翻转各个单词
        reverseEachWord(sb);
        return sb.toString();
    }
    //去除空格
    public StringBuilder removeSpace(String s){
        //先去除前后空格
        int start = 0;
        int end = s.length() - 1;
        //如果为空就往前/后
        while(s.charAt(start) == ' ') start++;
        while(s.charAt(end) == ' ') end--;
        StringBuilder res = new StringBuilder();
        //此时去检测中间空格
        while(start <= end){
            char c = s.charAt(start);
            if(c != ' ' || c == ' ' && s.charAt(start-1) != ' '){
                res.append(c);
            }
            start++;
        }
        return res;
    }
    //翻转整个字符串
    public void reverseString(StringBuilder sb, int start, int end) {
        while (start < end) {
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);
            start++;
            end--;
        }
    }
    //翻转各个单词
    public void reverseEachWord(StringBuilder sb) {
        //用start来标记所有单词的起始位置
        int start = 0;
        //用end来记录所有单词的结束位置
        int end = 1;
        //记录最长
        int len = sb.length();
        while(start < len){
            //分别找到每个单词的结尾,注意到最后一个单词的时候不能超长
            while(end<len && sb.charAt(end)!=' '){
                end++;
            }
            //找到结尾之后就直接传入下标调用翻转函数
            reverseString(sb,start,end-1);
            //替换start(+1 是因为要跳过空格),end
            start = end + 1;
            end = start + 1;
        }
    }
}

相关推荐

  1. 工作准备day13

    2024-04-29 12:14:04       11 阅读
  2. 工作准备day21

    2024-04-29 12:14:04       13 阅读
  3. 工作准备day23

    2024-04-29 12:14:04       13 阅读
  4. 实习准备day8

    2024-04-29 12:14:04       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 12:14:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 12:14:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 12:14:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 12:14:04       20 阅读

热门阅读

  1. pytorch对音频数据的读取和保存

    2024-04-29 12:14:04       10 阅读
  2. Linux深入学习 - 进程

    2024-04-29 12:14:04       15 阅读
  3. stm32 boot脚设计

    2024-04-29 12:14:04       11 阅读
  4. FreeLearning Golang 译文集翻译完成

    2024-04-29 12:14:04       12 阅读
  5. C++——数据类型笔记

    2024-04-29 12:14:04       9 阅读
  6. python常用库函数

    2024-04-29 12:14:04       10 阅读
  7. HTTP状态码详细解读

    2024-04-29 12:14:04       12 阅读
  8. C语言真题20套

    2024-04-29 12:14:04       11 阅读
  9. Python医院挂号脚本

    2024-04-29 12:14:04       12 阅读
  10. 蓝桥杯每日一题:空调(差分)

    2024-04-29 12:14:04       13 阅读
  11. 学习 Rust 的第五天:了解程序的基本控制流程

    2024-04-29 12:14:04       10 阅读
  12. 冷热数据分离方案

    2024-04-29 12:14:04       11 阅读
  13. typedef,#define,asserr,exit函数,free函数

    2024-04-29 12:14:04       12 阅读