字符串移位问题
总结:
提高程序时间效率的方法之一:以空间开销换时间
面试官的痛点在第二层次:
1、第一层次,有扎实的基础知识和编程能力,能有相关的分析方法和调试能力,解决问题。
2、第二成次,能否更进一步思考,更巧妙和让人眼睛一亮的解决方法,优化时间效率或者空间效率,代码是否写的更加简单高效。
这个题目更进一步的思考:在于分析出只要找s2是否是s1s1的字串,用标准库函数 :strstr
问题:
在linux下成char *src会出现strlen失效,运行的时候出现段错误??
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> //提高时间效率的方法之一:采用空间换时间法 //为什么写成指针会出现段错误? //方法一:穷举搜索法 O(n*n) char src[]="AABBCD"; char dst[]="CDAA"; const int len=6; bool MoveContain1() { int i,j; for( i=0;i<len;i++) { char tempstr=src[0]; for( j=0;j<len-1;j++) src[j]=src[j+1]; src[len-1]=tempstr; //判断:strstr字符串匹配函数 if(strstr(src,dst)==0) { return true; } } return false; } /*方法二:所有对s1循环移位得到的字符串都是s1s1的字串, 将问题转换为搜索s2是否是s1s1的字串*/ bool MoveContain2() { char *temp=dst; strcat(src,temp); if(strstr(src,dst)==0) return false; else return true; } int main() { if(MoveContain1()==true) printf("bingo\n"); else printf("not find\n"); if(MoveContain2()==true) printf("bingo\n"); else printf("not find\n"); return 0; }