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

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = “abcdefg”, k = 2
输出: “cdefgab”

示例 2:

输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”

限制:

1 <= k < s.length <= 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof

方法一

解题思路

  • 定义一个字符数组,长度与字符长一样
  • 定义一个变量k记录字符数组的长度
  • 将字符串n以后的部分以字符形式取出,然后存放到字符数组chararray中
  • 将字符串n以前的部分以字符形式取出存放到chararray数组中
  • 将字符数组转换为字符串,然后返回

字符数组转化为字符串的方法:
public String(char[] value, int offset, int count)
分配一个新的 String,它包含取自字符数组参数一个子数组的字符。 offset 参数是子数组第一个字符的索引, count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
参数:
value - 作为字符源的数组。
offset - 初始偏移量。
count - 长度。

class Solution {
    public String reverseLeftWords(String s, int n) {
         //定义一个字符串数组,长度与字符长一样
         char[] ch = new char[s.length()];
         int k = 0;
         //将字符串n以后的部分以字符形式取出存放到ch数组中
         for(int i = n; i < s.length(); i++){
             ch[k++] = s.charAt(i);
         }
         //将字符串n以前的部分以字符形式取出存放到ch数组中
         for(int i = 0; i < n; i++){
             ch[k++] = s.charAt(i);
         }
         //将字符串数组转换为字符串
         String str = new String(ch, 0, k);
         return str;
    }
}

方法二

上面的方法是在字符数组中实现反转的,最后还要将字符数组转换为字符串有些繁琐,实际上可以直接声明一个空字符串来进行反转。

class Solution {
    public String reverseLeftWords(String s, int n) {
        String str = "";
        for(int i = n; i < s.length(); i++){
            str = str + s.charAt(i);
        }
        for(int i = 0; i < n; i++){
            str = str + s.charAt(i);
        }
        return str;
    }
}

方法三

public String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。

class Solution {
    public String reverseLeftWords(String s, int n) {
        return s.substring(n, s.length()) + s.substring(0, n);
    }
}

方法四

解题思路:

  • 使用StringBuilderAPI中的StringBuilder构造一个不带任何字符的字符串生成器str,其初始容量为 16 个字符。
  • 将字符串n以的字符以char形式取出,然后用append方法存入str中
  • 将字符串n以的字符以char形式取出,然后用append方法存入str中
  • 将str以字符串形式返回

public StringBuilder append(char c)
将 char 参数的字符串表示形式追加到此序列。该方法的最终效果与以下操作过程的效果相同:先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。

public String toString()
返回此序列中数据的字符串表示形式。将分配一个新的 String 对象,并将它初始化,以包含当前由此对象表示的字符串序列。然后返回此 String。对此序列的后续更改不影响该 String 的内容。
代码:

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder str = new StringBuilder();
        for(int i = n; i < s.length(); i++){
            str.append(s.charAt(i));
        }
        for(int i = 0; i < n; i++){
            str.append(s.charAt(i));
        }
        return str.toString();
    }
}     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值