2024.4.1力扣每日一题——故障键盘

2024.4.1

      • 题目来源
      • 我的题解
        • [方法一 直接利用StringBuilder的反转函数](#方法一 直接利用StringBuilder的反转函数)
        • [方法二 字符数组](#方法二 字符数组)

题目来源

力扣每日一题;题序:2810

我的题解

方法一 直接利用StringBuilder的反转函数

使用StringBuilder构造结果,并利用其反转函数进行翻转
时间复杂度 :O( n 2 n^2 n2)
空间复杂度:O(1)

java 复制代码
 public String finalString(String s) {
  StringBuilder sb=new StringBuilder();
     for(char ch:s.toCharArray()){
         if(ch=='i')
             sb=sb.reverse();
         else
             sb.append(ch);
     }
     return sb.toString();
 }
方法二 字符数组

使用字符数组代替StringBuilder,自定义实现reverse方法,使得时间复杂度降低到O(logn)
时间复杂度:O(nlogn)

空间复杂度:O(1)。char数组是结果数组,不计算入空间复杂度

java 复制代码
public String finalString(String s) {
    char[] sb=new char[s.length()];
    int i=0;
    for(char ch:s.toCharArray()){
        if(ch=='i')
            reverse(sb,i);
        else
            sb[i++]=ch;
    }

    return new String(sb,0,i);
}
public void reverse(char[] s,int n){
    for(int i=0;i<n/2;i++){
        char t=s[i];
        s[i]=s[n-i-1];
        s[n-i-1]=t;
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
hanlin0322 分钟前
刷题笔记:力扣第84题-柱状图中最大的矩形
笔记·算法·leetcode
麻瓜code23 分钟前
【LeetCode】两数相加:模拟加法竖式,用进位 flag 一次遍历解决
java
青少儿编程课堂1 小时前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
zzzll11111 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
java·spring boot·后端
一个初入编程的小白3 小时前
数据结构:二叉树链式结构的实现
数据结构
辰烨chenye5 小时前
LeetCode Hot 100 题解 · 普通数组篇
算法·leetcode·职场和发展
lhldsg8 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都8 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒8 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb9 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析