剑指 Offer 58 - II. 左旋转字符串

题目:

思路:

【1】思路很简单,转为数组进行遍历,然后因为知道长度了,所以放进对应的位置即可

代码展示:

//时间2 ms击败51.48%
//内存41.6 MB击败30.61%
//时间复杂度O(N)
//空间复杂度O(N)
class Solution {
    public String reverseLeftWords(String s, int n) {
        int l = s.length();
        char[] ch = new char[l];
        for (int i = 0; i < l; i++){
            if (i < n){
                ch[l-n+i] = s.charAt(i);
            }else {
                ch[i-n] = s.charAt(i);
            }
        }
        return new String(ch);
    }
}

对应上面的这种其实还有第二种写法(拆分成两个循环):
//时间4 ms击败32.33%
//内存41.3 MB击败67.70%
class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder sb = new StringBuilder();
        for (int i = n; i < s.length(); ++i) {
            sb.append(s.charAt(i));
        }
        for (int i = 0; i < n; ++i) {
            sb.append(s.charAt(i));
        }
        return sb.toString();
    }
}

//时间0 ms击败100%
//内存41.6 MB击败28.51%
class Solution {
    public String reverseLeftWords(String s, int n) {
        return s.substring(n, s.length()) + s.substring(0, n);
    }
}

//依据上面的函数其实可以简化成这种,开辟的内存最少,而且采用的是系统复制,操作也是最少的,算得上是这几种中最优的
//时间0 ms击败100%
//内存41.2 MB击败84.69%
class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] ch = s.toCharArray();
        String s1 = new String(ch,0,n);
        String s2 = new String(ch,n,s.length()-n);
        return s2+s1;
    }
}

 

posted @ 2023-02-01 14:49  忧愁的chafry  阅读(9)  评论(0编辑  收藏  举报