`

字符串循环左移

阅读更多
已经字符串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
分享到:
评论

相关推荐

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

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

    python字符串循环左移

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

    字符串循环左移(右移)的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. *...

    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; } ...

    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) 字符串中的字符集合为

    PTA_基础编程答案_整章.zip

    7-31 字符串循环左移 20 4527 13605 0.33 7-32 说反话-加强版 20 4030 25470 0.16 7-33 有理数加法 15 4476 10862 0.41 7-34 通讯录的录入与显示 10 4323 19524 0.22 7-35 有理数均值 20 3281 17202 0.19 7-36 复数...

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

    - **字符串循环左移**: - 问题描述:对于给定的字符串和整数n,实现字符串的循环左移n位。 - 解决方案:利用三次逆序的方法,先逆序前n位,再逆序后面的部分,最后逆序整个字符串。这种方法的时间复杂度为O(n),...

    Python语言基础与应用

    5. **字符串循环左移**: 通过切片和拼接操作,可以实现字符串的循环左移。将字符串分为两部分,然后将第二部分放在第一部分前面。 ```python s = str(input()) n = int(input()) a = s[:n] b = s[n:] print(b + a...

    微机原理课程设计之字符串动画显示

    如 `ll` 用于存储最长字符串的长度,`xx` 用来计算字符串居中的列号,`i` 和 `j` 分别用于表示右移和左移操作的起始列号,`lorg` 存储左移后新字符串的起始列号,`count` 和 `count1` 作为循环计数器。 在代码段中...

    算法学习笔记

    - Rotate String:字符串循环左移或右移指定的字符数。 - Reverse Words in a String:反转字符串中的所有单词。 - Valid Palindrome:检查一个字符串是否是回文。 - Longest Palindromic Substring:找到字符串中的...

Global site tag (gtag.js) - Google Analytics