1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1

来源:互联网 发布:linux解压tar.xz文件 编辑:程序博客网 时间:2024/06/05 19:58

1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1

370人阅读 评论(0)收藏举报
分类:
作者同类文章X

    1.实现一个函数,可以左旋字符串中的k个字符。
    AABCD左旋一个字符得到ABCDA
    AABCD左旋两个字符得到BCDAA

    [cpp] view plain copy
    print?
    1. 将一个字符串左旋k个,首先想到将一个字符串左旋一个,然后把得到的这个新字符串在进行左旋一次,总共这样循环k次,就得到左旋k次后的字符串  

    比如:

    abcdef左旋一次得到bcdefa,再把bcdefa左旋一次,得到cdefab,这样进行下去就可得到左旋k次后的字符串

    [cpp] view plain copy
    print?
    1. #include<stdio.h>  
    2. #include<stdlib.h>  
    3. #include<string.h>  
    4. void reverse(char arr[], int n, int len)  
    5. {  
    6.     int i = 0;  
    7.     while(n)//将字符串左旋  
    8.     {  
    9.         char tmp = arr[0];//保存首字符,不然覆盖后就不存在了  
    10.         for(i=0; i<len-1; i++)//将第一个字符后的所有字符向前移动  
    11.         {  
    12.             arr[i] = arr[i+1];  
    13.         }  
    14.         arr[len-1] = tmp;//将第一个字符放到字符串的末尾  
    15.         n--;//进行下一次左旋  
    16.     }  
    17. }  
    18. int main()  
    19. {  
    20.     char arr[] = "aabcd";  
    21.     int n = 0;  
    22.     scanf("%d",&n);  
    23.     reverse(arr, n,strlen(arr));  
    24.     printf("%s\n",arr);  
    25.     system("pause");  
    26.     return 0;  
    27. }  




    2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
    例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=ABCD和s2=ACBD,返回0.

    AABCD左旋一个字符得到ABCDA
    AABCD左旋两个字符得到BCDAA

    AABCD右旋一个字符得到DAABC
    AABCD右旋两个字符得到CDAAB

    这个题和上个题的方法差不多

    先将s1左旋一位,判断是否和s2相等,相等则返回1,不想等就就将s1再左旋一位,然后再和s2比较,如果左旋strlen(s1)次后还没有相等就返回0.

    [cpp] view plain copy
    print?
    1. #include<stdio.h>  
    2. #include<stdlib.h>  
    3. #include<string.h>  
    4. int reverse(char arr1[], char arr2[], int len)  
    5. {  
    6.     int n = len;  
    7.     int i = 0;  
    8.     while(n)  
    9.     {  
    10.         char tmp = arr1[0];  
    11.         for(i=0; i<len-1;i++)  
    12.         {  
    13.             arr1[i] = arr1[i+1];  
    14.         }  
    15.         arr1[len-1] = tmp;  
    16.         if(strcmp(arr1,arr2) == 0)//字符串比较函数  
    17.             return 1;  
    18.         n--;  
    19.     }//当左旋n次后arr1与arr2还不相等时while循环就结束了此时n==0  
    20.     if(n == 0)  
    21.         return 0;  
    22. }  
    23. int main()  
    24. {  
    25.     char arr1[] = "abcdef";  
    26.     char arr2[] = "cdefab";  
    27.     int count = reverse(arr1, arr2,strlen(arr1));  
    28.   
    29.     if(count == 1)  
    30.         printf("arr2是arr1翻转之后的字符串\n");  
    31.   
    32.     if(count == 0)  
    33.         printf("arr2不是arr1翻转之后的字符串\n");  
    34.   
    35.     system("pause");  
    36.     return 0;  
    37. }  


    0
    0
     
     

      相关文章推荐
    • 实现一个函数,可以左旋字符串中的k个字符
    • Presto的服务治理与架构在京东的实践与应用--王哲涵
    • 实现一个函数,可以左旋字符串中的k个字符(不同复杂度的算法)
    • 深入掌握Kubernetes应用实践--王渊命
    • 把一个字符串左旋k个字符的2种方法
    • Python基础知识汇总
    • 左旋字符串K个字符的3种实现方法
    • Android核心技术详解
    • 【每天学点算法题10.15】指定一个字符串,对字符串左旋K位
    • Retrofit 从入门封装到源码解析
    • 判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串。
    • 自然语言处理工具Word2Vec
    • 汇编试验 (1)将 BUF开始的 10 个单元中的二进制数转换成两位十六进制数的 ASCII 码,在屏幕上显示出来。要求码型转换通过子程序 HEXAC实现,在转换过程中,通过子程序 DISP实现显示. (2)编程实现从键盘接受一个字符串,再从键盘接受一查找的字符(例如’g’) ,找到时提示’Yes,found !’,找不到时提示’No found !’ 。
    • 字符串左旋
    • 1.4 写一个函数判断两个字符串是否使用相同的字符构成。
    • 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
    阅读全文
    0 0
    原创粉丝点击