`

字符串循环左移

阅读更多
已经字符串adbcefg123,给定位置 i,例如i=3,将整个字符串循环左移i位,得到cefg123adb


请编写程序实现如上 字符串循环左移算法

算法一:
1.将第0个字符移动到最后个位置,之后将字符串从后往前移动一个字符
2.重复步骤1 i次
3.打印出最后结果字符串

  /**
     * 字符串循环左移
     * @param i
     * @param source
     * @return
     */
    public String loopLeftShift(int i, String source)
    {

        if (source == null) {
            return null;
        }

        int len = source.length();

        if (i <= 0 || i >= len) {
            return null;
        }
        StringBuilder sb = new StringBuilder(source);
        for (int j = 0; j < i; j++) {
            int begin=0;
            int end=len-1;
            char beginChar=sb.charAt(begin);
            while (end > 0) {
               beginChar=  swap(end,beginChar,sb);
                end =end-1;
            }

            swap(0,beginChar,sb);

        }

        return sb.toString();
    }




时间复杂度分析: o(n*i) 如果i=n-1,则为o(n^2)


思考并改进算法:

改进版本一:
由这个 第j个位置的字符移动到 (j-i+len)%len 的位置 的想法,则可以通过调整n个元素的位置来达到循环左移的目的

   /**
     * 循环左移动实现方法二
     * @param i
     * @param source
     * @return
     */
    public String loopLeftShift2(int i,String source)
    {
       

        if (source == null) {
            return null;
        }

        int len = source.length();

        if (i <= 0 || i >= len) {
            return null;
        }
        StringBuilder sb = new StringBuilder(source);

        //第j位直接移动 (j-i+len)%len 位
        int next =0;
        int begin=next;
        char beginChar=sb.charAt(begin);

        int count =0;

        while(true)
        {
             next=(next-i+len)%len;
            beginChar=this.swap(next,beginChar,sb);
            count++;
            if(count ==len){
                break;
            }
          //解环
            if(next ==begin){
                next =next+1;
                begin =next;
                beginChar=sb.charAt(begin);
            }

        }
        return sb.toString();
    }
 


时间复杂度;o(n)




0
0
分享到:
评论

相关推荐

    Java 实现字符串循环左移算法与解析

    内容概要:本文介绍了字符串循环左移的概念和方法。文中详细讲解了如何通过字符串截取与拼接的方法来实现字符串的循环左移,并提供了Java示例代码展示实现细节。对于超出字符串长度的移位操作,通过对移位数取模进行...

    编程技巧:字符串循环左移的多种实现方法

    内容概要:本文详细介绍了字符串循环左移的原理和四种实现方法:字符串切片、双指针旋转、队列模拟和暴力拼接。每种方法的实现代码和原理均进行了详细的解释,并对其时间和空间复杂度进行了分析。文中还列举了字符串...

    pure-bash-bible-zh_CN-字符串循环左移

    字符串循环左移 字符串循环左移 字符串循环左移 字符串循环左移 字符串循环左移

    将字符串循环左移、将数值循环左移

    1.将字符串循环左移,如ABCDEFG,从3位置循环左移后为DEFGABC 1.将数值循环左移,如1234567,从3位置循环左移后为4567123

    python字符串循环左移

    本文实例为大家分享了python字符串循环左移的具体代码,供大家参考,具体内容如下 字符串循环左移 给定一个字符串S[0…N-1],要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动...

    字符串循环左移.docx

    字符串循环左移.docx

    字符串循环左移(右移)的2种算法(附图解析)

    字符串循环左移算法问题描述:暴力法利用三次翻转巧妙实现 问题描述: 给定一个字符串s[0…n-1],要求将s的前k个字符移动到字符串s的尾部。 举个栗子:将字符串“HelloWorld”的前5个字符移动到字符串的尾部,即要...

    pta的字符串循环左移.c

    pta的C语言设计代码

    数据结构和算法:字符串

    本篇文章将详细探讨字符串操作相关的知识点,重点讲述字符串循环左移、全排列问题及其解决方案。 首先,字符串循环左移问题是指将一个字符串S的前k个字符移动到字符串的尾部,例如字符串“abcdef”前两个字符“ab”...

    计算机二级c语言上机常考算法的程序实现.pdf

    本资源主要介绍了计算机二级C语言上机常考算法的程序实现,涵盖了 Newton 迭代法、冒泡排序法、最大最小值、素数判断、析取数字、选择排序法、字符串循环右移和字符串循环左移八个方面的算法实现。 一、Newton 迭代...

    数据结构-字符串.pptx

    1. **字符串循环左移**:这是一个常见的字符串操作,要求将字符串的前k个字符移到末尾。例如,字符串"abcdef"循环左移2位变为"cdefab"。实现这个操作的高效方法是在O(n)的时间复杂度和O(1)的空间复杂度内完成。暴力...

    字符串面试题整理

    1. **字符串循环左移**:给定一个字符串和一个整数k,将字符串中的每个字符向左移动k个位置。例如,字符串"abcdefg",k=2,移动后的结果为"efgabcd"。可以使用双指针技巧,将字符串分为两部分,然后交换它们。 2. *...

    NSException如何解决.md

    字符串循环左移

    C语言字符串的练习题和答案

    ### 字符串循环左移 #### 代码示例: ```c void fun(char s[], int m) { int i, j; char ch; for (i = 0; i ; i++) { ch = s[0]; for (j = 1; s[j] != '\0'; j++) { s[j - 1] = s[j]; } s[j - 1] = ch; } ...

    使用Java实现字符串左移指定位数StringRotation.zip

    使用Java实现字符串左移指定位数,rotateLeft 方法接受一个字符串和左移的位数,然后返回一个新的字符串,其中原始字符串的字符已经循环左移了指定的位数。

    C语言中关于字符串左右循环移位的问题

    首先,让我们来解决字符串循环右移的问题。方法一:利用已有的字符串函数。我们可以使用strcpy函数和strlen函数来实现字符串的循环右移。下面是具体的实现代码: ```c void rightloop(char *a, int n) { char b...

    c#循环左移字符示例

    C# 循环左移字符示例是指将一个字符串中的字符进行循环左移操作,以达到将字符串中的一部分字符移至字符串的另一部分的效果。这种操作在实际应用中有着非常重要的作用,例如在数据加密、字符串处理等领域。 循环...

    Python 实现字符串中指定位置插入一个字符

    如下所示: str_1='wo shi yi zhi da da niu/n'str_list=list(str_1) nPos=str_list.index('/') str_list.insert(nPos,',') str_2=.join(str_list) ... 您可能感兴趣的文章:python字符串循环左移Python拼接字符串的7

    华为2019校招笔试题之处理字符串(python版)

    华为2019在线笔试题,现整理如下,以供之后参考 GitHub ...-- 对合法字符串循环左移10次,在进行排序输出。(举例:比如字符串"abc",循环左移一次的结果为"bca") 输入描述: (1) 字符串中的字符集合为

Global site tag (gtag.js) - Google Analytics