`
lg_asus
  • 浏览: 190776 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

左旋转一个字符串,时间复杂度O(n),空间复杂度O(1)

 
阅读更多
题目和解答思路均来自网络, thank the internet.
---------------割---------------------------------
给定一个字符串, a = new int[N];,要求将前K个字符移到a的后K个位置,如:123456,左旋转2位变成345612,要求时间复杂度是O(N),辅助空间是O(1)。

这题最简单的做法是:
先开一个K长度的临时空间b,用于存储a的前K个字符,然后对a遍历,从第K个位置起将a中的字符前移K位,最后将b中的字符填充到a的后K个位置。
这种解法时间复杂度是O(n)但空间复杂度是O(k)。

另一种奇葩解决,是定义一个翻转函数T,将一个数组进行翻转。T有如下性质:T(T(X)) = X
T(XY) = T(Y)T(X)

因此可以分析YX就是X和Y分别调换位置,也就是T(T(X)T(Y))。即 先分别对X,Y进行翻转,然后再对T(X)T(Y)整体翻转。
三次翻转的时间复杂度分别是:K/2 + (N-K)/2 + N/2=N
这里貌似不需要辅助空间。

注意:翻转函数很有用,例如可以用来判断回文数字。
分享到:
评论

相关推荐

    旋转字符串1

    旋转字符串问题是一个经典的字符串处理问题,它出现在许多编程竞赛和面试中,比如LeetCode平台上的题目。本问题的核心是判断给定的两个字符串A和B是否可以通过对A进行一定次数的旋转操作变成相同。 首先,我们需要...

    数据结构-字符串.pptx

    实现这个操作的高效方法是在O(n)的时间复杂度和O(1)的空间复杂度内完成。暴力移位法虽然简单,但效率较低,而通过特定算法如“完美洗牌”子算法,可以在不额外占用大量空间的情况下达到目标。 2. **最长递增子序列...

    左旋转字符串1

    左旋转字符串是一个常见的编程问题,通常出现在算法面试或者LeetCode等在线编程平台上。...空间复杂度是O(1),因为我们只使用了常数个额外的变量来保存临时字符。这种解决方案简单且高效,适用于解决旋转字符串的问题。

    java之左旋转字符串介绍

    左旋转字符串的优点是可以快速地实现字符串的旋转操作,时间复杂度和空间复杂度都合乎要求。但是,左旋转字符串的缺点是需要进行多次翻转操作,可能会增加程序的复杂度。 结论 左旋转字符串是一种常用的字符串操作...

    字符串反转编程珠玑1

    标题中的“字符串反转编程珠玑1”指的是编程中关于字符串反转的一种特殊问题,而描述中提到的“将一个具有n个元素的一维向量x向左旋转i个位置”则是另一种与字符串反转相关的操作,虽然这里是以一维向量的形式提出,...

    华为编程题及字符串编程

    例如,可能需要实现一个高效的算法来判断两个字符串是否互为旋转字符串(一个字符串可以通过将另一字符串的某个部分移动到开头形成)或者找出字符串中最长的回文子串等。 接下来,关于字符串操作的常见方法。在...

    2020 CSP-S 第1轮 初赛 第 18 题 二、阅读程序题 第3题.pdf

    程序使用了两个队列 `q[2]` 和两个映射 `s[2]` 来存储字符串的旋转操作,空间复杂度为 O(n)。 总结 这道题考察了程序员的多方面能力,包括类和对象的设计、字符串处理、BFS 算法和时间复杂度分析等。这道题要求...

    基于字符串移位包含的问题详解

    循环移位,也称为旋转字符串,指的是将字符串的首字符移动到末尾,其余字符依次向前移动一位,形成一个新的字符串。 在提供的代码中,有两个不同的解决方案,分别是穷举法(IfRotateContain1)和空间换取时间法...

    stringrotation:编写函数“ bool isrotation(字符串s1,字符串s2)”,以验证一个字符串是否是另一个字符串的旋转(例如:“ waterbottle”是“ erbottlewat”的旋转)

    空间复杂度也是O(n),因为我们需要创建一个长度为2n的新字符串。这是一个有效的解决方案,因为它避免了不必要的循环和比较操作,同时保持了清晰的逻辑。 在实际编程中,遇到类似的问题时,我们需要考虑字符串操作的...

    C++实现一维向量旋转算法

    一维向量旋转问题的基本需求是:给定一个长度为n的一维向量(例如,字符串或整数数组),将向量中的元素向左或向右移动i个位置。例如,对于一个长度为8的向量abcdefgh,如果要向左旋转3个位置,结果应变为defghabc。...

    编程之法面试和算法心得1

    在字符串问题中,旋转字符串是一个常见的面试题目,它要求高效地将字符串的一部分移到另一部分,保持原字符串不变。通常,我们希望解决方案在时间和空间上都有较好的性能。第一种解法,暴力移位法,虽然简单直观,...

    程序员编程艺术:面试和算法心得

    要求实现一个函数,其时间复杂度为 O(n),空间复杂度为 O(1)。 - **分析与解法**: - **解法一:暴力移位法** - 初步想法是按照题目要求逐个移动字符。可以定义一个辅助函数 `LeftShiftOne` 来移动一个字符到字符...

    第五次作业-字符串压缩数据.zip

    4. **Burrows-Wheeler Transform (BWT)**:这是一种预处理步骤,通过旋转字符串并根据字符顺序形成新的字符串,然后使用其他压缩方法(如Huffman或Run-Length Encoding)进一步压缩。 5. **Dictionary-based ...

    百度面试一二三面.pdf

    1. **字符串拷贝函数 `strcpy`**:这是一个C语言中的函数,用于将一个字符串复制到另一个字符串中。其功能是从源字符串`src`复制内容到目标字符串`dest`,需要注意防止缓冲区溢出。 2. **堆排序算法**:堆排序是一种...

    LeetCode 精选 TOP 面试题(2)1

    这里的时间复杂度是O(n^2),额外空间复杂度是O(1),因为旋转是在原地完成的。C++代码中展示了如何通过两步交换实现这一操作。 2. **字母异位词分组(49. Group Anagrams)** 这道题目要求将一组字符串按照字母异位...

    coding-interview-in-java.pdf

    - 在旋转排序数组中找到最小元素,要求算法的时间复杂度为O(log n)。这是对二分查找算法应用的考察。 20. FindMinimuminRotatedSortedArrayII - 在含有重复元素的旋转排序数组中找到最小元素。这是一个需要处理...

    面试---10. 数据结构与算法.pdf

    这种方法的时间复杂度为O(n),空间复杂度为O(1)。 - **扩展内容**: - 逆序字符串的具体实现可以通过交换两端的元素来完成,直到中间位置。 - 在处理这类问题时,需要注意数组索引的正确性,尤其是在多次逆序的...

    吉大 各种基本ACM必备算法基础

    左偏树是一种自平衡二叉查找树,通过旋转操作来保持树的平衡,从而确保合并操作的时间复杂度为O(logN)。 ##### 树状数组 树状数组是一种数据结构,常用于实现区间查询和更新操作。它通过对索引的低bit位进行操作来...

    《编程之法:面试和算法心得1》数据结构

    例如,旋转字符串问题要求在保持字符串原地不变的情况下,将前若干个字符移动到字符串末尾,要求时间复杂度为O(n),空间复杂度为O(1)。书中提供了两种解法,一是暴力移位法,虽然简单易懂但时间复杂度过高;二是三步...

Global site tag (gtag.js) - Google Analytics