首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

旋转字符串算法由浅入深

Author:bakari     Date:2012.9.8 昨天在写一个旋转字符串的函数时,写着写着发现有好多种方法,最简单的莫过于替换然后覆盖再插入。...总结下来此问题的算法大约有五个,这是在分得很细的情况下,前面的两个是自己想的,后面的三个参考了一个叫July的大神的思路。其实这些算法总体的思路大同小异,但这些细节问题也让我的思维有了很大的开阔。...,K表示要循环移动的位数,注意对K的处理上,K有可能比N大,如果K == N,刚好回到原来的字符串,即没有移动,所以,我们可以用K %= N来代替K,效果是一样的。...思路三: 将所要旋转字符串当做一个整体,然后集体移动,如果是左循环,就进行右移动,右循环就左移动。...以上的算法思想,是非常低级的,一切没有涉及数据结构的算法都是非常低级的算法,但这些算法或多或少在不同的程度上打开了我们的思维,对以后的学习会有很多的帮助。

78870

算法-旋转字符串-暴力移位法

题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。...请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。...分析与解法 解法一:暴力移位法 初看此题,可能最先想到的方法是按照题目所要求的,把需要移动的字符一个一个地移动到字符串的尾部,如此我们可以实现一个函数LeftShiftOne(char* s, int...n) ,以完成移动一个字符到字符串尾部的功能,代码如下所示: 下面,我们来分析一下这种方法的时间复杂度和空间复杂度。...针对长度为n的字符串来说,假设需要移动m个字符到字符串的尾部,那么总共需要 mn 次操作,同时设立一个变量保存第一个字符,如此,时间复杂度为O(m n),空间复杂度为O(1),空间复杂度符合题目要求,但时间复杂度不符合

46720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    算法-旋转字符串-三步翻转法

    题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。...请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。 分析与解法 解法二:三步反转法 对于这个问题,换一个角度思考一下。...将一个字符串分成X和Y两个部分,在每部分字符串上定义反转操作,如X^T,即把X的所有字符反转(如,X="abc",那么X^T="cba"),那么就得到下面的结论:(X^TY^T)^T=YX,显然就解决了字符串的反转问题...例如,字符串 abcdef ,若要让def翻转到abc的前头,只要按照下述3个步骤操作即可: 首先将原字符串分为两个部分,即X:abc,Y:def; 将X反转,X->X^T,即得:abc->cba;将Y...反转上述步骤得到的结果字符串X^TY^T,即反转字符串cbafed的两部分(cba和fed)给予反转,cbafed得到defabc,形式化表示为(X^TY^T)^T=YX,这就实现了整个反转。

    86620

    旋转字符串

    难度:简单 来源:剑指 Offer 58 - II 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串旋转操作的功能。...比如,输入字符串 abcdefg 和数字 2 ,该函数将返回左旋转两位得到的结果 cdefgab。..."cdefgab" 示例 2: 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose" 限制: 1 <= k < s.length <= 10000 题解一:字符串切片...思路:这个解法很巧妙,通过把字符串加上自己,然后截取对应的长度即可实现左旋转。...).substr(n, s.length) }; 时间复杂度: ,执行用时:84 ms 空间复杂度: ,内存消耗:38.9 MB 题解二:遍历+余数 思路:这个解法也相当巧妙,利用字符所在索引和字符串长度的余数来逐个移动字符的位置

    59220

    力扣旋转字符串

    二.左旋转字符串 三:字符串旋转结果 思路一: 思路2: 一、轮转数组 题目链接:(来源于力扣)(右旋) 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。...sz; reverse(nums, 0, k-1); reverse(nums, k, sz - 1); reverse(nums, 0, sz - 1); return nums; } 三:字符串旋转结果...题目描述: 自定义一个函数,要求判断一个字符串是否为另外一个字符串旋转之后的字符串。...示例1: 给定字符串s1 =AABCD和字符串s2 = BCDAA s1左旋2个数后可以得到s2,所以结果为真,返回1; 示例2: 给定s1=abcd和s2=ACBD, s1无法通过旋转得到...,s2.结果为假,返回0; 思路一: 通过计算字符串长度得到sz,然后循环旋转sz次,每次旋转后与s2进行比较.

    30810

    算法千题案例】每日LeetCode打卡——94.旋转字符串

    原题样例:旋转字符串 C#方法:判断子串 Java 方法:判断子串 总结 原题样例:旋转字符串 给定两个字符串, A 和 B。 A 的旋转操作就是将 A 最左边的字符移动到最右边。...如果在若干次旋转操作之后,A能变成B,那么返回True。...C#方法:判断子串 由于 A + A 包含了所有可以通过旋转操作从 A 得到的字符串 因此我们只需要判断 B 是否为 A + A 的子串即可。...A 得到的字符串 因此我们只需要判断 B 是否为 A + A 的子串即可。...文章采用 C#和 Java 两种编程语言进行解题 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们 那今天的算法题分享到此结束啦,明天再见!

    26000

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券