当前位置: 首页 > article >正文

Leetcode——541. 反转字符串 I

 题解一

思路

新引进了一个字符串对象,它相比String是可修改的,多线程安全的,通过它和String的一些方法,完成操作。

代码

class Solution {
    public String reverseStr(String s, int k) {
        StringBuffer res = new StringBuffer();
        int length = s.length();
        int start = 0;
        while(start < length){

            int firstK = (start + k < length) ? start + k : length;
            int secondK = (start + 2 * k < length) ? start + 2 * k : length;

            StringBuffer t = new StringBuffer(s.substring(start, firstK));
            res.append(t.reverse());

            start += 2 * k;
            if(firstK < secondK){
                res.append(s.substring(firstK, secondK));
            }
        }
        return res.toString();
    }
}

 总结

新学习了一个StringBuffer类型,相比String来说,具有可操作(增删改和反转),多线程安全的特性。巩固了String对象的substring()方法(这里的string居然是小写),区间是大于等于a,小于b(例如s.substring(a,b))。

解法二

思路

通过start和end指针的移动,实现替换操作,第六行通过一个函数判断出需要反转的区间,然后通过i += 2 * k 来保留不需要反转的部分。

代码

class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        for(int i = 0; i < arr.length; i += 2 * k){
            int start = i;
            int end = Math.min(arr.length-1, start + k-1);
            while(start < end){
                char temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;

                start++;
                end--;
            }
        }
        return new String(arr);
    }
}

总结

这种替换方法,上一篇还没觉得多好用,这一篇直接就体现出来了,第六行的比较也可以用三元运算符,交换的部分也可以额外写一个函数替代。

个人对于这种题的解答,过于追求对过程的模拟,例如在我刚写的时候我特别想把star~start+k,start+k~start+2k,分开进行判断,以及对数组剩余长度的判断,但是回头一看分的实在有点太碎了,如这个题解就非常的清晰,但是我并不能完整的思考出来,还是需要精进。


http://www.kler.cn/a/587422.html

相关文章:

  • EDID读取学习
  • 从零学习rhcsa
  • 蓝耘MaaS平台:阿里QWQ应用拓展与调参实践
  • PySide(PyQt),使用types.MethodType动态定义事件
  • 系统架构设计师—案例分析—数据库篇—数据库性能优化
  • java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性
  • VSCode C语言环境(多文件一键运行)
  • 面试求助:接口测试用例设计主要考虑哪些方面?
  • Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名
  • Java使用JDBC连接操作Sqlite 笔记250314
  • 工程化与框架系列(34)--前端重构技巧指南
  • 蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代
  • 基于Python+Flask+MySQL+HTML的爬取豆瓣电影top-250数据并进行可视化的数据可视化平台
  • 【论文精读】DifFace: Blind Face Restoration with Diffused Error Contraction
  • 【C++】如何高效掌握UDP数据包解析
  • 设计模式之责任链设计模式
  • 2.2.3 TCP—UDP-QUIC
  • 星越L_内后视镜使用讲解
  • 电子招采软件系统,如何实现10年可追溯审计
  • Spring、Spring Boot、Spring Cloud 的区别与联系