字符串处理
回文子串
https://www.nowcoder.com/questionTerminal/003482c395bd41c68082f6adc545a600
今天对于处理字符串的认识有了进一步了解
可以采用数组记录的方式暂存,也可以采用扩散的方式去遍历,当然也可以是爆力破解
数组记录:
#include <stdio.h> #include <stdlib.h> #include <string.h> char *get_max_same_string(char *str1,char *str2) { int len1,len2,i,j,x,y,max=0,conut=1,now,result; //int **a; len1=strlen(str1); len2=strlen(str2); //printf("%d,%d",len1,len2); //a=malloc(sizeof(int)*len1); //for(i=0;i<len2;i++) //a[i]=malloc(sizeof(int)*len2); int a[len1][len2]; for(i=0;i<len1;i++) for(j=0;j<len2;j++) { if(*(str1+i)!=*(str2+j)) a[i][j]=0; else a[i][j]=1; } for(i=0;i<len1;i++) { for(j=0;j<len2;j++) { if(a[i][j]==1) { x=i; y=j; now=i; while(a[++x][++y]) { conut++; } } if(conut>max) { max=conut; result=now; } conut=1; } } printf("%d,%d\n",max,result ); char *git=malloc(max); for(i=0;i<max;i++) git[i]=*(str1+result+i); return git; } int main(int argc, char const *argv[]) { char *buf1="qasdfghge"; char *buf2="oaasdfljk"; char *buf3; buf3=get_max_same_string(buf1,buf2); printf("%s\n", buf3); return 0; }
扩散方式:
#include <stdio.h> #include <stdlib.h> #include <string.h> static int ans=0; void fun(char *str,int left,int right,int flag) { while(left>=0&&right<strlen(str)&&str[left]==str[right]) { left--; right++; ans++; } } int main() { char *buf=(char *)malloc(100); int i; scanf("%s",buf); int len; len=strlen(buf); for(i=0;i<len;i++) { fun(buf,i,i,0); fun(buf,i,i+1,1); } printf("%d",ans); }