LeetCode Day8|● 344.反转字符串(原地) ● 541. 反转字符串II(i可以大步跨越) ● 卡码网:54.替换数字(ACM模式多熟悉熟悉)

day8-1 ● 344.反转字符串

整体思路

字符串和数组的思路差不多
原地操作

代码实现

class Solution {
	/**
	 * 时间复杂度: O(n)
	 * 空间复杂度: O(1)
	*/
    public void reverseString(char[] s) {
        int l = 0;
        int r = s.length - 1;
        while(l < r){
            char temp = s[l];
            s[l] = s[r];
            s[r] = temp;
            l++;
            r--;
        }
    }
}

总结

一般每门编程语言的都有库函数实现

day8-2 ● 541. 反转字符串II

整体思路

for 循环里面的 i 可以成段成段的跳越,不一定要 i++ 一步一步地跳跃

代码实现

class Solution {
    /** 
     * 时间复杂度: O(n)
	 * 空间复杂度: O(1)
	*/
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        // 每隔2k将前k个字符进行反转
        for(int i = 0; i < ch.length; i+=2*k){
            if(i + k <= ch.length){// 取等与否可以用特殊用例测试 i=0 s=abc k=3
                reverse(ch, i, i + k - 1);// 左闭右闭
                continue;
            }
            // 剩余字母少于k个,则将剩余字符全部反转
            reverse(ch, i, ch.length - 1);
        }
        return new String(ch);
    }
    private void reverse(char[] ch, int i, int j){
        while(i < j){
            char temp = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
            i++;
            j--;
        }
    }
}
class Solution {
	/** 
     * 时间复杂度: O(n)
	 * 空间复杂度: O(1)
	*/
	public String reverseStr(String s, int k) {
	  char[] ch = s.toCharArray();
	    for(int i = 0; i < ch.length; i+=2*k){
	        int start = i;
	        int end = Math.min(ch.length - 1, start + k -1);
	        while(start < end){
	            char temp = ch[start];
	            ch[start] = ch[end];
	            ch[end] = temp;
	            start++;
	            end--;
	        }
	    }
	    return new String(ch);
	}
}

总结

for循环里面的i可以成段成段(2k 段)的跳越,不一定要 i++ 一步一步地跳跃

day8-3 ● 卡码网:54.替换数字

题目

在这里插入图片描述

解题思路

从后向前填充,减少空间复杂度

代码实现

import  java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int len = s.length();
        // 统计长度
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                len += 5;
            }
        }
        // 拷贝
        char[] res = new char[len];
        for(int i = 0; i < s.length(); i++){
            res[i] = s.charAt(i);
        }
        // 替换
        for(int i = s.length() - 1, j = len - 1; i >= 0;i-- ){
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                res[j--] = 'r';
                res[j--] = 'e';
                res[j--] = 'b';
                res[j--] = 'm';
                res[j--] = 'u';
                res[j--] = 'n';
                
            }else{
                res[j--] = res[i];
            }
        }
        System.out.println(res);
    }
} 

总结

acm模式得多熟悉熟悉

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 22:10:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 22:10:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 22:10:04       58 阅读
  4. Python语言-面向对象

    2024-07-15 22:10:04       69 阅读

热门阅读

  1. 【C++语言】正则表达式

    2024-07-15 22:10:04       20 阅读
  2. Mybatis防止SQL注入

    2024-07-15 22:10:04       21 阅读
  3. Vue2中的指令修饰符

    2024-07-15 22:10:04       19 阅读
  4. Python面试题:如何在 Python 中处理大数据集?

    2024-07-15 22:10:04       22 阅读
  5. 安全编织:Eureka驱动的分布式服务网格安全策略

    2024-07-15 22:10:04       22 阅读
  6. 速盾:cdn加速能提高多少?

    2024-07-15 22:10:04       16 阅读
  7. einsum算子不支持问题处理

    2024-07-15 22:10:04       21 阅读
  8. Vant Ui 最新访问地址

    2024-07-15 22:10:04       19 阅读
  9. AWS云计算实战:电商平台发卡机器人开发指南

    2024-07-15 22:10:04       24 阅读
  10. lua 实现一个 StateMachine状态机

    2024-07-15 22:10:04       20 阅读