秋招在即,你准备好了吗?领英算法面试真题分享!

领英面试题:旋转字符串II

描述
给出一个字符串(以字符数组形式给出),一个右偏移和一个左偏移,根据给出的偏移量循环移动字符串,并保存在一个新的结果集中返回。(left offest表示字符串向左的偏移量,right offest表示字符串向右的偏移量,左偏移量和右偏移量计算得到总偏移量,在总偏移量处分成两段字符串并交换位置)。

在线评测地址

样例1

输入:str ="abcdefg", left = 3, right = 1
输出:"cdefgab"
解释:左偏移量为3,右偏移量为1,总的偏移量为向左2,故原字符串向左移动,变为"cdefg" + "ab"。

样例 2

输入:str="abcdefg", left = 0, right = 0
输出:"abcdefg" 
解释:左偏移量为0,右偏移量为0,总的偏移量0,故字符串不变。

样例 3

输入:str = "abcdefg",left = 1, right = 2
输出:"gabcdef"
解释:左偏移量为1,右偏移量为2,总的偏移量为向右1,故原字符串向右移动,变为"g" + "abcdef"。

考点:
字符串处理。
解题思路

  • 利用左偏移量减去右偏移量得到offset。
  • 如果总偏移量为正数,说明字符串向左移动,A表示offset左边的字符串,B表示offset右边的字符串
  • 如果总偏移量为负数,说明字符串向右移动,A表示从右边算起offset位置处左边的字符串,B表示其右边的字符串
  • 返回 B + A ,实质是两段子串的位置交换

源代码

public class Solution {
    /**
     * @param str: An array of char
     * @param left: a left offset
     * @param right: a right offset
     * @return: return a rotate string
     */
    public String RotateString2(String str, int left, int right) {
        // write your code here
        if(str.length() == 0) return str;
        int len = str.length();
        int offset = left - right;                //计算总偏移量
        int flag = offset >= 0 ? 1 : -1;        
        String results = new String();
        String A = new String();
        String B = new String();
        offset = Math.abs(offset) % len;
        if(flag >= 0){
                A = str.substring(0,offset);        //截取offset左边部分
                B = str.substring(offset,len);        //截取offset右边部分
        }
        else{
                A = str.substring(0,len - offset);        //截取右边算起offset位置处左边部分
                B = str.substring(len - offset,len);         //截取其右边部分
        }
        results = B.concat(A);        
        return results; 
    }
}

更多题解参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值