二维字符串输入_【每日leetcode】左旋转字符串

小夕的公众号发文方式

  • 由于公众号的改版,如果不经常发文的话,小夕的读者朋友们会收不到小夕的写的文字,因此天天发文就很必要
  • 但小夕的一篇漫画算法原创文章,大概需要5-10个小时的耗时,动画+漫画的那些图片制作起来非常费时间!
  • 所以为了既天天发文,又能保持高质量的漫画算法原创文章的更新,现绝对用如下的发文方式

之前的原创动漫漫画算法文

戳一下即可进行跳转哦~

动漫算法:字节面试题太坑了,刚回答完,就被面试官diss了!

动漫算法:作业帮面试题:求一个数的二进制中1的个数

动漫算法:百度面试题:用两个栈实习一个队列

动漫算法:如何在二维数组中找到一个数?

动漫算法:美团面试题:根据前序序列和中序序列重建二叉树!

动漫算法:美团面试题,将链表逆序存放到数组中

动漫算法:腾讯面试题,请实现把字符串中的空格替换为“%20”

发文方式

  • 小夕会天天更新文章,文章以小夕的每日在算法刷题群公布的题目的题解为主,另外每天小夕会在文章中聊一下在大厂百度(嗯~是的小夕在百度工作)的遇到的问题和一些工作经验(注意这些文章以每天刷题为主,所以这些文章第二天就会删除,所以请紧随小夕的步伐刷题,后续看情况再议,目前是决定当天发文,第二天删文)
  • 小夕的漫画算法原创文章会保持一周1-2篇的更新
  • 这样小夕既能天天发文保持天天更新,又能保证高质量的算法原创文章了~

题目

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"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

1.调用切片函数解法

思路

  • 前n个字符串也就是0到n位的时候,放在后面;
  • 剩余的字符串n到末尾的字符串,放到前面;
  • 然后将二者进行拼接。f23609a38c05986605ffe08b822115fa.png

Java

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

Python

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        return s[n:] + s[:n]

JS

var reverseLeftWords = function(s, n) {
return s.substring(n) + s.substring(0,n)
};

复杂度

都是O(n)

2.原地反转法

当面试官不让我们使用切片函数呢?切片函数也就是substring 和 python中的s[n:]这种

原字符串7f3a9cc3ae57cb8aca286862fd1ba674.png反转[0,n-1]的字符串9c8ca1387e018d32b86cd6fd548d8c57.png反转[n,末尾]的字符串d45607d5891bc4bd7406689bf9e92869.png整个字符串串来个大反转f7476915dd9b3778f42c74b9acb07ef6.png

可以看到 得到我们需要的左移2个字符到末尾

Java

class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] chars = s.toCharArray();
        if (chars.length             return "";
        }
        reverse(chars, 0, n - 1); // 反转[0,n-1]个字符串 也就是前n个字符串
        reverse(chars, n, chars.length - 1);  // 反转[n,末尾]字符串串
        reverse(chars, 0, chars.length - 1); // 来个整体的字符串反转
        return new String(chars);
    }
 
    public void reverse(char[] chars, int start, int end) {
        while (start             char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
    }
}

C++

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        int len=s.length();
        if(0==len || 0==n)
            return s;
        string &temp=s;
        reverse(temp,0,n-1);  // 反转[0,n-1]个字符串 也就是前n个字符串
        reverse(temp,n,len-1); // 反转[n,末尾]字符串串
        reverse(temp,0,len-1); // 来个整体的字符串反转
        return s;
    }
    void reverse(string &s,int start,int end)
    {
        char temp;
        while(start        {
            temp=s[start];
            s[start]=s[end];
            s[end]=temp;
            start++;
            end--;
        }
    }
};

Python

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        if n > len(s) or not s:
            return ''
        s = list(s)
        def reverse(start, end):
            while start                 temp = s[start]
                s[start] = s[end]
                s[end] = temp
                start += 1
                end -= 1
        length = len(s) - 1
        reverse(0, n-1)
        reverse(n,length)
        reverse(0, length)
        return ''.join(s)

小夕最后有话说

  • 动画、漫画、加6种编程语言(Java、C++、PHP、GO、Python、JS)的讲解很费心血,希望大家能帮忙转发到朋友圈和身边的朋友,这样小夕的文章能让更多的人看见的话,小夕会更有动力更新文章的呀~
  • 公众号后台回复 打卡 查看公众号福利 坚持转发文章到朋友圈,小夕送上100元的红包给你,谢谢铁杆粉丝的支持。
  • 加小夕微信 tiehanhan12342 拉你进算法刷题群。

4034aec90884aef890fe6418b10dc46e.png       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值