C语言 判断一个旋转字符串 python是不是另一个旋转任意位所得

没有更多推荐了,
不良信息举报
举报内容:
C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!在《Cracking the coding interview》一书,有一道判断两个字符串是否为旋转字符的题目。
    假设给出两个字符串s1,s2和一个isSubstring函数,isSubstring函数能够检测一个字符串是不是另一个字符串的子串。 请结合isSubstring函数实现以下功能,只使用一次isSubstring,判断s2是不是s1的旋转字符串。(旋转字符串:"waterbottle"是"erbottlewat"的旋转字符串。)
我的思路:
        先判断两个字符串是否是变位词,变位词:&abc&是&cba&或&bca&等的变位词。
        如果是变位词,找到s1第一个单词在s2中的位置p1,判断从p1到s2末尾的字符串是否等于s1从行首到某个位置p3的字符串。
        若相等,使用isSubstring判断s1中从p3到末尾的字符串是否是s2的一个子串。
        若成立,则说明s2是s1的旋转字符串。中间仅仅使用一次subString函数。
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#define MAX 256
typedef enum logic{False=0,True} BOOL;
BOOL isShift(const char *str1,const char *str2){
tmp[MAX]={0};
char *p1str=(char *)str1;
char *p2str=(char *)str2;
if(strlen(str1) != strlen(str2))
if(NULL == str1 || NULL == str2 )
while('\0' != *p1str ){
curl=(int)(*p1str);
tmp[curl]++;
while('\0' != *p2str ){
curl=(int)(*p2str);
tmp[curl]--;
for(i=0;i&MAX;i++){
if(0 != tmp[i])
BOOL isRotate(const char* str1, const char * str2){
char *p2,*p3;
char *p4=(char *)str2;
if(True == isShift(str1,str2))
while(*p4!='\0'){
if(*str1 == *p4)
p2=(char *)p4;
p3=(char *)str1;
while(*p2!='\0'){
if(*p2==*p3)
else break;
if(*p2=='\0') break;
if( NULL == strstr(str2,p3) ) return
int main(){
char s1[]="apple";
char s2[]="pleap";
char s3[]="elppa";
char s4[]="eappa";
if( False == isRotate(s1,s2)) printf("no, s1
not the rotation of s2\n");
else printf("yes, s1 rotation of s2\n");
if( False == isRotate(s2,s3)) printf("no, s2
not the rotation of s3\n");
else printf("yes, s3 rotation of s2\n");
if( False == isRotate(s1,s4)) printf("no, s1
not the rotation of s4\n");
else printf("yes, s1 rotation of s4\n");
很快写出了代码,但运行结果却是错误的,使用gdb不断地调bug,语法和逻辑没有破绽,运行却总是出错,找了很久,直到最后才发现,错在一个小地方(代码中红色字段),把strstr函数的参数写反了,所以strstr函数一直返回NULL。发生这种错误,真是让人无法接收。
又在《编程之美》上看到一个相似的例题,其中提出一种非常简洁的方法:
它的思路:
      假设两个字符串分别为ABCD和DCBA,将第一个字符串&ABCD&连接成新的字符串&ABCDABCD&。
      比较新的字符串"ABCDABCD&与字符串&DCBA&,判断字符串&DCBA&是不是另一个字符串的子串。
      如果是,则说明是旋转字符串。
(思路之简洁巧妙,让人赞叹。相比之下,我的方法十分笨拙,而且容易出错,想来也对,代码越长越可能出错,只有这种时候,才能深刻地体会到算法的重要性,&简单&的重要性)
&最后,向大家推荐一个非常棒的个人网站,网站作者解决了cracking the coding interview一书的所有题目,很厉害的一个家伙。
网站地址:
阅读(...) 评论()输入的字符串中可能会有特殊符号,标点符号等不属于英文字符,将其删除,麻烦大家了,非常感谢。。。。
程序已经调试通过。
void main()
char str[100];
printf("Input a string:");
gets(str);
i = j = 0;
while (str[i] != '\0')
if (str[i] >='a' && str[i] = 'A' && str[i] <= 'Z')
str[j] = str[i];
str[j] = '\0';
printf("The new string:");
puts(str);
两个程序均已通过。一个倒过来打印,另一个翻转后打印。
第一个程序:
void main()
char str[100...
3、void ex2(char *b,char *str)
{ //在该函数中默认数组b足够长,能够接纳字符串中元素
int blength = strlen(...
int alph,digit,space,
void count(char str[]);
void main...
有输入的吗?======================#include#include#defineSIZE120#defineSIZE210voidmain...
/*用c语言编写程序 输入一个正整数n,求1到n的数中1出现的个数*/#include&#034;stdio.h&#034;int count(int n){ int i,j,c=...
答: 我个人认为这个应该有三种。
祝你好运一生一世!点击好评,谢谢你!
答: 资源间的数据交换和授权认证、安全控制都在这一层控制实现
答: 某些ADSL调制解调器使用USB接口与电脑相连,需要在电脑上安装指定的软件以添加虚拟网卡来进行通信
铝属于两性金属,遇到酸性或碱性都会产生不同程度的腐蚀,尤其是铝合金铸件的孔隙较多,成分中还含有硅和几种重金属,其防腐蚀性能比其他铝合金更差,没有进行防护处理的铝铸件只要遇到稍带碱性或稍带酸性的水,甚至淋雨、水气、露水等就会受到腐蚀,产生白锈。
解决的办法。
铝铸件完成铸造后,在机械加工前,先要进行表面预处理,如预先对铸件进行喷砂,涂上一道底漆(如锌铬黄底漆),在此基础上再进行机械加工,以避免铸铝件在没有保护的情况下放久了被腐蚀。
嫌麻烦就把你洗衣机的型号或断皮带,拿到维修点去买1个,自己装上就可以了(要有个小扳手把螺丝放松,装上皮带,拉紧再紧固螺丝)。
规模以上工业企业是指全部国有企业(在工商局的登记注册类型为&#034;110&#034;的企业)和当年产品销售收入500万元以上(含)的非国有工业企业。
把A产品,B产品及C产品的数量相加,和辅助材料的总数相除,求出分配率,然后再用求出的分配率去分别乘以A,B,C三个产品的数量,这样就可以把辅助材料分别分配到三种产品中去了。比如:A产品的数量是50,B产品的数量是70,C产品的数量是80,合计是:200。辅助材料是:40
分配率=40/50+70+80=0.2
A产品分配辅助材料=50*0.2=10
B产品分配辅助材料=70*0.2=14
C产品分配辅助材料=80*0.2=16
产后妈妈乳房出现变形、病变主要是因为打回奶针、停止哺乳等原因,如果妈妈们能在断奶后3个月及时到专业机构进行乳房疏通,就完全可以避免这种状况,还会有事半功倍的效果。产后如何减肥,产后减肥方法,产后瘦身,产后恢复。产前准备,产后恢复。
乳房疏通被称为绿色健胸。乳房疏通原理是通过有氧运动达到深层疏通,既可以避免乳汁留在腺管内可能造成的堵塞、感染等病变,又可以使乳房恢复到之前的形状,还可以修护子宫、卵巢等。
此外,女性在怀孕前,也应该做乳房疏通,这样可以防止将来生育后因乳腺堵塞而不能哺乳,给自己和宝宝的健康加一份保险。
喂奶:使乳房再发育
不少妈妈都认为,哺乳是导致乳房下垂、松弛的主要原因。但专家指出,母乳喂养不会影响乳房原貌,而且如果按照医生指导哺乳,母亲的乳房在哺乳期后还会变得更加丰满、结实。
哺乳过程中,婴儿吸吮乳头的动作会不断刺激母亲乳房内分泌乳汁的乳腺组织,乳腺组织接受外界刺激越多就越发达,这与肌肉运动越多便越结实的道理一样。因此,坚持母乳喂养的母亲在哺乳期后,乳房会变
1.锻炼腹部仰卧起坐如果我们使用合适和正确的练习方式,我们也可以拥有梦寐以求的腹部。而仰卧起坐就是比较好的方式。如果想让仰卧起坐发挥更好的效果,可以尝试做如下改变每分钟仅做10次仰卧起坐,在上身与地面呈45度角的时候保持5秒钟,这样的效果比起1分钟做60次的要好很多。仰卧于地面或者体操垫上,两腿屈膝稍分开,大小腿成直角,两手交叉抱于脑后,另一人压住受试者双脚。要求起坐时双肘触及两膝,仰卧时两肩胛必须触垫。仰卧起坐时我们的动作常常不到位,通常是背部和肩部使足了劲儿,而腹部却没有得到真正的锻炼。加强心脏功能锻炼散步散步可以在任何时间,任何地点进行。任何的体育锻炼最好包括心血管的锻炼,因为这将会更加帮助加强心脏的功能和燃烧脂肪。而散步将会是最简单,最有效的锻炼方式。散步一小时可以帮助消耗大约500卡的能量。我们知道,如果消耗3500卡的能量就可以帮助减掉一磅的体重,因此我们可以预期,散步7个小时左右就可以减掉一磅体重-如果你不做其他的事情。但是散步也需要循序渐进,要有计划。刚刚开始散步时最好一次散步5到10分钟,然后以后慢慢的增加到每次散步30分钟左右。最好每次增加的时间不要超过5分钟,一次一次的增加。最好以你习惯的频率不断的增加散步的长度。这样就会达到健康减肥的效果。
3.炼身体肌肉跨马步有关专家说生活不是直线的,而是多线的。所以减肥运动中少不了跨马步。这种运动锻炼很多肌肉群:四头肌,腿窝和臀肌。动作要领主要是:一腿向前大跨一步,保持你的身体处在自然状态。弯曲前腿大约90度,将身体重心放在后腿上面,慢慢的将后腿膝盖降低到地面。为了使跨马步更加的有效,你可以变化方式。不仅仅向前跨,还可以向后向前结合,向左右跨等等。内容出自 第一幼儿教育 儿童网4.增强肌肉锻炼俯卧撑俯卧撑适合不同的人群。如果使用得当的话,俯卧撑可以带来很多方面的锻炼。比如增强胸肌,背肌,三头肌还有腹肌。对于那些刚刚参加体育锻炼的人来说,可以从简单开始。比如,可以将手放在桌子上开始,然后降低高度,增加难度。手伏在椅子上,然后到将身体伏在地上,然后撑起来。正确的做法是:面对着地面,扑到下去,双手着地,双手分开的距离稍微超过双肩的宽度。注意保持身体的笔直,从肩膀到脚,背部,臀部保持平衡。慢慢的弯曲手,将身体下降,然后撑起身体,保持腿部绷直。还有增加难度的方式。如果你将前面提到的练习的比较熟练,就可以测试所谓的稳定性俯卧撑:保持俯卧撑的姿势,然后,将一直手收起来,只有一直手支撑身体,将身体重心放在其他的一只手,双腿上面。这样坚持几天就会有明显的效果。
5.进行间隔练习在体育锻炼中做到锻炼和适当休息结合,将会不断提高你的运动能力,增强瘦身效果。在体育锻炼中,不断变化频率,将会刺激增氧健身系统不断的改变。你的这个系统变得越强,体内消耗能量的能力将会越强。方法就是强度锻炼一到两分钟,然后回到以前的状态两到十分钟。具体的情况可以根据自己的恢复情况而定。在整个过程中不断的如此重复。
6.蹲坐力量的练习肌肉越多,燃烧脂肪的能力越强。一般情况下,专家比较中意多肌肉群锻炼。蹲坐就是一种不错的锻炼方式。他可以同时锻炼到四头肌,腿窝和臀肌。为了达到最佳效果,在练习的时候还是要注意一些事项。双腿分开的距离相当肩宽的距离,背部保持直立。弯曲膝盖,降低臀部。坐在一张椅子上面,但是事实上是没有那张椅子的。刚刚开始练习时,有张椅子在也有不小的帮助的。刚刚开始时,就慢慢的将自己的臀部下降到椅子上,然后提臀离开椅子。掌握技巧之后可以脱离椅子,自由练习。7.爬楼梯运动爬楼梯瘦身效果虽然佳,但是关键在坚持。如果过了一段时间突然停止了,体重反弹也属正常。爬楼梯是一项很普遍的运动方式,对瘦身也有着非常明显的作用:上楼梯所消耗的热量要比散步多4倍,比晨跑锻炼还多80%。 爬楼梯时身体必须略前倾,加上手的摆动、跨步,能够增强下肢肌肉和韧带的力量,保持下肢关节的灵活性,且能增强内脏功能。爬楼梯时人的呼吸频率和脉搏次数会加快,这对增强人体的呼吸系统机能,加强心脏、血管系统都有极好的促进作用。在爬楼梯的过程中要注意强度,要注意根据自己的身体情况确定运动量,并经常进行适当的调整。锻炼到背肌和二头肌深蹲锻炼做深蹲这个练习方式将会主要锻炼到背肌和二头肌。下面是正确锻炼的姿势:双腿以肩宽分开站立,然后慢慢的蹲下,弯曲臀部。如果刚刚开始站起来有难度的话,可以先尝试坐在有一点高度的垫子上面,或者有点倾斜的其他物体上面。保持你的骨盆一点点前倾,收缩腹部。也可以负重练习,比如增加哑铃什么的。
9.甩掉脂肪游泳锻炼游泳是一种全身运动,不但可以塑形,还可提高你的心肺功能,锻炼全身几乎所有的肌肉,使人焕发神采。游泳时,因为水的密度(换句话说就是阻力)和传热性能比空气大(水的热传导系数比空气大26倍,就是说在温度相同的情况下,人体在水里散失热量比在空气里快二十多倍,可以有效地消耗热量),所以身体在水中运动消耗的能量比陆地上多。这些能量(能量食品)的供应要靠消耗体内的糖和脂肪来补充。坚持经常游泳可以甩掉身体多余的脂肪,恢复完美线条。
基本动作一:月牙弯 [主攻:小腹、臀部、大腿]
双脚并拢站立,脚趾向前,双臂放在两旁。吸气,然后抬起双臂伸过头顶,指尖指向天花板。呼气,同时弯腰向前,双手着地(可以弯曲膝盖)。吸气,呼气,呼气的同时右腿往后跨一大步(左腿膝盖弯曲90度,膝盖在脚踝的正上方;右腿往后跨时尽量伸展,用脚趾骨着地)。吸气,抬起双臂伸过头顶,双眼直视前方。保持动作,然后回到起始姿势,换左腿伸展。
降低难度: 右腿往后跨时让膝盖着地,双手放在左膝盖上。
增加难度:在结束动作的基础上,吸气,然后往后弓起身体、双臂,头部也向后伸,视线放在指尖。
基本动作二: 柳枝摆 [主攻:小腹两侧]
双脚并拢站立,双臂放在身体两侧。向左侧弯曲膝盖并抬起左脚,放在右大腿上。双掌合拢放在胸前,呼吸两次。第三次吸气时,伸展双臂过头顶,指尖指向开花板。呼气,再吸气的时候身体弯向左边。呼吸,再吸气的时候伸直身体。重复3到5次,换一侧身体再做。
降低难度:把左脚放在小腿上或者让脚趾着地来保持平衡。
增加难度: 平衡、弯曲身体地时候闭上眼睛。
基本动作三:小船摇 [主攻:小腹和后背]
坐在地上双膝弯曲,双脚着地,双手放在大腿上。保持身体挺直,与头部成一直线。身体往后倾45度角,抬起双脚,让小腿与地面平衡,脚趾伸直。呼气,吸气,同时把身体同大腿降低3到4英寸左右,让身体形成V的形状。呼气,抬起身体和大腿。重复3到5次。
降低难度:用双手稳住大腿,仅后倾身体。
增加难度:形成V型以后,把双臂伸过头顶。
基本动作之四:悬浮 [主攻:肩膀、手臂、小腹和后背]
以俯卧撑的动作作为起始,双臂绷直,双手在双肩下方,头部、身体一直到脚跟成一直线。呼吸一次,呼气时朝地面放低胸部,向后弯曲双肘,双臂靠近身体,绷紧臀部。保持身体离地几英寸。
降低难度:膝盖着地,调整双手的位置直到头部到膝盖的身体成一直线。
增加难度:保持动作地时候,抬高左腿6到12英寸,定住,然后放下。重复三次之后,换右腿再做。
基本动作之五: 就座 [主攻:臀部和大腿]
双脚并拢站立,脚趾向前,双臂放在身体两侧。吸气,双臂伸过头顶,手掌相向。呼气,以45度角往后面坐下去,保持膝盖在脚趾的后方,绷紧臀部来支撑背部,目视前方。
降低难度:双脚以臀宽的距离站立做这个动作,双手放在大腿上,往后坐的时候仅弯曲30度。
增加难度:坐下去以后,踮起脚,以脚趾骨支撑身体。(双膝可以在脚趾前方);目视手指尖。
1、宝宝会降低免疫力
对于宝宝而言,母乳不足会降低婴儿的免疫能力。因为母乳里充满了抗体,特别是初乳中富含大量免疫物质,这是人工婴儿配方所不能替代的。研究表明,母乳喂养的婴儿比使用奶瓶的婴儿较少患肠胃感染、尿道感染、呼吸道感染、中耳感染、牙齿脱落、肺炎、脑膜炎及婴儿猝死综合症等,而且这些抵抗力将在断奶之后的很长时间里继续发挥作用。
没有母乳,也无法满足婴儿成长发育的营养需求。母乳是婴儿最好的食物,可以以恰到好处的成分配比满足婴儿所需的全部营养,而其他婴儿食物即使某方面营养再丰富,也无法与母乳相媲美。
2、不利于妈妈产后恢复
对于妈妈而言,哺乳不是身材走样的负担,反而会促进身材的恢复。这是婴儿对母亲乳头的吸吮可反射性地引起母体脑垂体分泌催乳素,哺乳越多,婴儿吸吮越频,催乳素分泌越多。催乳素除了能促进乳房的生长发育,使乳房变得更为丰满外,还能促进子宫收缩,复原。
除了婴儿的生理需要,母乳喂养也是妈妈和孩子的精神需要,没有这一步骤,损害最大的就是母子亲情,会造成婴儿母爱的缺乏和母亲爱子之情的淡化。
1、直立单腿飞作用:通过做直立单腿飞的运动方法可帮助产妇有效起到减上背部,肩膀,腹部,臀部,股四头肌等部位的肥肉,可以说让新妈妈整体瘦身。
动作:1、在做这种运动的时候应该先双脚站立,最好是与肩同宽;
2、然后再将双膝微微弯曲而双手则各持哑铃在两侧;
3、接着将左腿向身后伸出,臀部以上的身体前倾,双臂则保持在胸前伸展姿势,在呼气的同时手臂向两侧打开,集中注意力使肩部的重力绷紧在一起;
4、之后再将身体放低开始和重复,右腿做5次然后两边互换着做,长期如此便能够很好的起到瘦小腹的功效。同时还可以帮助产后新妈妈起到减手臂、大腿等部位的肥肉。
2、跪式俯卧撑
跪在一块垫子或毛巾上。双臂在前,用双手支撑住自己。在支起上身的同时收紧小腹,并做深呼吸。重复10次。
3、仰卧高抬腿
仰卧在垫子上,双手放在身侧或臀部底下。向上高抬腿,并让臀部抬离地面,重复10次。
4、提臀运动
仰面躺在垫子上,双手放在身侧,膝盖弯曲,脚着地。抬起臀部,只让肩和脚与地面接触。重复10次。
pu化妆镜现在买红色、公司的主题色的比较多,你看你要做什么哈
过热保护、缺水保护、燃烧故障保护、系统超压保护、排风安全保护、缺气保护、防冻保护、水泵防抱死、断电,断气自锁保护等几十项防护功能。
一般学习时间短的那种都是针对有基础的人开设的,如果你没有基础的话,最好还是从基础的开始学起,不要相信那种宣传速成的,都是不靠谱的,据说深圳的森派职业培训学校还不错,您可以去考察一下
推荐格伦斯热能设备智造有限公司,电采暖炉代理不仅成本低而且服务还特别好哦,有需要可以咨询看看哦。
我觉得格伦斯批发还不错,专业生产燃气壁挂炉、模块炉、厨卫等产品,批发价格更优惠哦。
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415Linux系统下的C语言练习:判断一个字符串是不是另一个字符串的子串,比如&ab&是&aabcd&的子串
下的C语言练习:判断一个字符串是不是另一个字符串的子串,比如&ab&是&aabcd&的子串
int com(char *p, char *q, int n, int m)
char *tmp = (char *)malloc(sizeof(char) * 20);
if(NULL == tmp)
printf(&error\n&);
char *tmp1 =
char *tmp2 =
char *tmp3 =
int flag = 0;
for(i = 0; i &= m - ++i )
for(j = j& i + ++j)
*tmp++ = *q++;
tmp = tmp1;
if(strcmp(tmp, p) == 0)
for(i = 0; i &= n - ++i )
for(j = j& i + ++j)
*tmp++ = *p++;
tmp = tmp1;
if(strcmp(tmp,q) == 0)
if(n == m)
if(strcmp(p, q) == 0)
int main()
int l, l1;
char *p = (char *)malloc(sizeof(char) * 20);
char *q = (char *)malloc(sizeof(char) * 20);
if(NULL == p || NULL == q)
printf(&NULL error\n&);
printf(&请输入第一个字符串\n&);
scanf(&%s&, p);
printf(&请输入第二个字符串\n&);
scanf(&%s&, q);
l = strlen(p);
l1 = strlen(q);
flag = com(p, q, l, l1);
switch(flag)
case 0: printf(&两字符串互不为对方的子串\n&);
case 1: printf(&第一个字符串为第二个的子串\n&);
case 2: printf(&第二个字符串为第一个的子串\n&);
case 3: printf(&互为子串\n&);
default: printf(&111\n&);判断一个给定的字符串是否在另一个给定字符串里面_百度知道
判断一个给定的字符串是否在另一个给定字符串里面
用c语言编写程序,判断一个给定的字符串是否在另一个给定字符串里面,并确定其位置。
我有更好的答案
/********************************************************************
This software is part of the ast package
Copyright (c)
AT&T Corp.
and it may only be used by you under license from
AT&T Corp. (&AT&T&)
A copy of the Source Code Agreement is available
at the AT&T Internet web site URL
If you have copied or used this software without agreeing
to the terms of the license you are infringing on
the license and copyright and are violating
AT&T&#39;s intellectual property rights.
Information and Software Systems Research
AT&T Labs Research
Florham Park NJ
Glenn Fowler &gsf@research.att.com&
David Korn &dgk@research.att.com&
Phong Vo &kpv@research.att.com&
********************************************************************/char*strstr(register const char* s1, register const char* s2){ register int
c1; register int
c2; register const char* t1; register const char* t2; if (s2) {
return (char*)s1;
c2 = *s2++;
while (c1 = *s1++)
if (c1 == c2)
return (char*)s1 - 1;
} while (*t1++ == *t2++);
} } return 0;} distfiles/ ast-ksh..tgz/ src/ lib/ libast/ comp/strstr.c
采纳率:46%
为您推荐:
其他类似问题
字符串的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 lintcode 旋转字符串 的文章

 

随机推荐