【剑指Offer1】左旋转字符串

2022/1/9 6:07:05

本文主要是介绍【剑指Offer1】左旋转字符串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。

比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

 

思路:

之前有做过类似的题目,当时是int数组的右移,和字符串的左旋是一样的

先全部翻转,之后分别对左右部分翻转,即可做到旋转数组的效果

代码如下:

class Solution {
    public String reverseLeftWords(String s, int n) {
        n = n % s.length();
        char[] cArray = s.toCharArray();
        // reverse all
        reverse(cArray, 0, s.length() - 1);
        // reverse left
        reverse(cArray, 0, s.length() - n -1);
        // reverse right
        reverse(cArray, s.length() - n, s.length() - 1);
        return String.valueOf(cArray);
    }

    public void reverse(char[] cArray, int start, int end) {
        while (start < end) {
            char c = cArray[start];
            cArray[start++] = cArray[end];
            cArray[end--] = c;
        }
    }
}

 

总结:

提交一看效率不咋地,看了效率比较高的代码,属实是把自己学进去了

不多说,代码如下:

class Solution {
    public String reverseLeftWords(String s, int n) {
        if (s.length() == 0) {
            return s;
        } else {
            String str1 = s.substring(0,n);
            String str2 = s.substring(n);
            String newstr = str2 + str1;
            return newstr;
        }   
    }
}

首先,题目说了限制:1 <= k < s.length <= 10000,所以跟本不需要处理取余;

其次,之前是int数组,所以截取数组比较麻烦,而这里是字符串,本身有截取函数,代码更加简洁(*但是空间还是浪费了);

之前硬生生凹出三种解法,还要学会选出最优解才行



这篇关于【剑指Offer1】左旋转字符串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程