字符串左旋问题

问题描述

左旋字符串中的k个字符。例如 ABCD左旋一个字符得到BCDA ,ABCD左旋两个字符得到CDAB

解法一:暴力破解法

  • 先左旋一个字符

    • 将字符串首个字符保存在temp中

      • 字符串其余字符向左移动一个单位
      • 将temp中保存的字符放到字符串结尾
  • 重复上述操作k次

    #include<stdio.h>
    #include<string.h>
    #include<assert.h>
    void move_left(char* arr, int k)
    {//指针指向非空assert(arr != NULL);int sz = strlen(arr);while (k > 0){char temp = *arr;for (int j = 0; j < sz-1; j++){*(arr + j) = *(arr + j + 1);}*(arr + sz - 1) = temp;k--;}
    }
    int main()
    {char  arr[] = "abcdef";int k = 3;move_left(arr, k);printf("%s", arr);
    }
    

解法二:三部翻转法

  • 找到切割位置k

  • 假设将字符串"abcde"左旋2个字符

  • 先将左边逆序得到“ba"

  • 再将右边逆序得到“edc”

  • 最后将整体逆序得到“cdeab"

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* low, char* high)
{assert(low != NULL);assert(high != NULL);while (low < high){char temp = *low;*low = *high;*high = temp;low++;high--;}
}
void move_left(char* arr, int k)
{//指针指向非空assert(arr != NULL);int sz = strlen(arr);assert(k <= sz);reverse(arr,arr+k-1);//左边逆序reverse(arr+k, arr +sz-1);//右边逆序reverse(arr, arr + sz - 1);//整体逆序
}
int main()
{char  arr[] = "abcdef";int k = 3;move_left(arr, k);printf("%s", arr);
}

补充扩展

判断一个字符串是否是由另一个字符串左旋得到

eg:str1=“abcdef”,

str2=“cdefab”,

str1是由str2左旋得到的

解法一:穷举法

将字符串2左旋k个字符与字符串1进行比较,使用strcmp函数如果相等则返回yes,反之返回no

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* low, char* high)
{assert(low != NULL);assert(high != NULL);while (low < high){char temp = *low;*low = *high;*high = temp;low++;high--;}
}
void move_left(char* arr, int k)
{//指针指向非空assert(arr != NULL);int sz = strlen(arr);assert(k <= sz);reverse(arr, arr + k - 1);//左边逆序reverse(arr + k, arr + sz - 1);//右边逆序reverse(arr, arr + sz - 1);//整体逆序
}
int is_left_move(char* s1, char* s2)
{int sz = strlen(s1);for (int k = 0; k < sz ; k++){move_left(s2, 1);int ret=strcmp(s1, s2);if (ret == 0)return 1;}return 0;
}
int main()
{char  arr1[] = "abcdef";char arr2[] = "cdefjab";int ret=is_left_move(arr1, arr2);if(ret==1){printf("yes");}else{printf("no");}
}

解法二:判断子串法

  • 在字符串str1中追加一个字符串str1,得到“abcdefabcdef"

  • 判断str2(“cdefab”)是否为str1(“abcdefabcdef")的子串

    #define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
    #include<string.h>
    #include<assert.h>
    int  is_left_move(char* str1, char* str2)
    {int len1 = strlen(str1);int len2 = strlen(str2);if (len1 != len2){return 0;}strncat(str1,str1,len1);//在字符串str1后面追加字符串str1中len1个字符char* pstr=strstr(str1, str2);//判断str2是否为str1的子串,返回值为指针,指针指向str2在str1中的位置,若不是则返回空指针if (pstr != NULL){return 1;}else {return 0;}
    }int main()
    {char  arr1[30] = "abcdef";char arr2[] = "cdefab";int ret=is_left_move(arr1, arr2);if (ret == 1){printf("yes");}else{printf("no");}
    }

字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到相关推荐

  1. 每日一题:字符串系列---判断一个字符串是否是对称字符串 * 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是对称字符串

    判断一个字符串是否是对称字符串 * 例如"abc"不是对称字符串,"aba"."abba"."aaa"."mn ...

  2. python判断字符是不是元音_编写一个程序来确定字符串python中有多少元音和辅音...

    下面的代码在python2.7.3上进行了测试.在你需要研究变量的作用域,你不能在一个方法中定义一个变量而在另一个方法中使用它. 研究一下从用户那里获取输入的最佳方法,sys是一个非常好的库 总是,总 ...

  3. 经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)

    题目 Assume you have a method isSubstring which checks if one word is a substring of another. Given tw ...

  4. python创建一个字典、关键字为只包含字母的字符串_探究Python源码,终于弄懂了字符串驻留技术...

    摘要:在本文中,我们将深入研究 Python 的内部实现,并了解 Python 如何使用一种名为字符串驻留(String Interning)的技术,实现解释器的高性能. 每种编程语言为了表现出色,并 ...

  5. python中find函数忽略大小写_python字符串(大小写、判断、查找、分割、拼接、裁剪、替换、格式化)...

    一.通用操作 1.Python len() 方法返回对象(字符.列表.元组等)长度或项目个数. 语法 len()方法语法: len( q ) 参数 q -- 对象. 返回值 返回对象长度. 实例 以下 ...

  6. Java黑皮书课后题第6章:*6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数。编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数

    6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数.编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数 题目 题目描述 破题 代码 运行示例 题目 ...

  7. Java黑皮书课后题第6章:**6.18(检测密码)一些网站对于密码具有一些规则。编写一个方法检测字符串是否是一个有效密码。编写一个程序,提示用户输入一个密码,如果符合规则,则显示…否则显示…

    6.18(检测密码)一些网站对于密码具有一些规则.编写一个方法检测字符串是否是一个有效密码.编写一个程序,提示用户输入一个密码,如果符合规则,则显示-否则显示- 题目 题目描述 破题 代码 运行示例 ...

  8. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...

    1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...

  9. mysql 条件 函数_mysql 函数 时间函数,数学函数,字符串函数,条件判断函数

    =========================================== mysql 相关函数 ============================================= ...

最新文章

  1. 九、将cs文件快速的转换成可执行文件和响应文件(配置编译开关的文件)
  2. shell字符串的处理
  3. ::的类名前有个 ,什么意思?
  4. CentOS 5.x 系统下使用yum 升级php到5.2.x
  5. ie6 div height bug css注意点(转)
  6. Scott 32 岁前端年终总结,探寻另一种可能
  7. ijkplayer框架详解
  8. idea快速生成SpringBoot项目无法启动问题
  9. 2021 泰迪杯 C 题
  10. 在线制作ico矢量图标
  11. java星座出生日期_求一个会java fx的大神 编写一个输入日期输出星座的代码 急急急...
  12. bsb 网络验证系统 安装教程 免费的易语言网络验证系统 真正免费 不收钱
  13. QQ被盗恢复原来QQ的好友有妙招
  14. 自己写的基金投资分析系统,这只基你们觉得怎么样?
  15. 【嵌入式】网络编程_pthread_fork
  16. sqlserver2016修改密码报错-错误: 18456
  17. 如何立即关闭 Node 服务器?
  18. jquery实现手风琴展开效果
  19. 清华非全日制计算机硕士,2021年清华大学硕士招生分析,专硕非全日制占比高达67%...
  20. 游戏中接入第三方渠道时 关于meta-data的一些小问题

热门文章

  1. Codechef Yet another cute girl
  2. 微信公众平台消息接口开发(34)桃花运测试
  3. Express实现路由分发控制、RESTful API
  4. Java代码实现负载均衡五种算法
  5. activemq的使用场景
  6. egg --- 初始化一个egg项目基本结构说明
  7. Java Web Jsp
  8. 软考信息系统监理师第五次作业
  9. 关于什么时候用pop什么时候用dismiss
  10. PG git pull