字符串题目大多数用滑动窗口法可以解决
int lengthOfLongestSubstring(char * s){
int len=strlen(s);
if(len==0)return 0;
int start=0,end=0;
int flag[260]={0};
int maxlen=0;
// for(int i=0;i<len;i++){
// start=i;
// end=i;
while(end<len){
int idx=s[end];
if(flag[idx]==0){
flag[idx]=1;
end++;
maxlen=maxlen>(end-start)?maxlen:(end-start);
}
else {
int idx=s[start];
flag[idx]=0;
start++;
}
}
//}
return maxlen;
}
char * longestCommonPrefix(char ** strs, int strsSize){
if(strsSize==0)return "";
char *ret=malloc(10000);
int flag[26]={0};
int minlen=strlen(strs[0]);
for(int i=1;i<strsSize;i++){
minlen=minlen<strlen(strs[i])?minlen:strlen(strs[i]);
}
int pre=0;
for(int j=0;j<minlen;j++){
int idx=strs[0][j]-'a';
flag[idx]=1;
int i;
for(i=1;i<strsSize;i++){
int idxx=strs[i][j]-'a';//从第二个开始依次比较
if(flag[idxx]==0)break;
}
if(i==strsSize){
pre++;
flag[idx]=0;
}else break;
}
if(pre==0)return "";
else{
memcpy(ret,strs[0],pre);
ret[pre]='\0';
return ret;
}
}
bool checkInclusion(char * s1, char * s2){
int len1=strlen(s1);
int len2=strlen(s2);
int flag[26]={0};
for(int i=0;i<len1;i++){
int idx=s1[i]-'a';
flag[idx]++;
}
int start=0,end=0;
int count[26]={0};
while(end<len2){
int idx=s2[end]-'a';
if(flag[idx]){
count[idx]++;
end++;
while(count[idx]>flag[idx]){
count[s2[start]-'a']--;
start++;
}
if(end-start==len1){
return true;
}
}else{
memset(count,0,26*4);
end++;
start=end;
}
}
return false;
}
char * reverseWords(char * s){
char *str=malloc(100000);
int k=0;
int end=strlen(s)-1;
while(end>=0){
if(s[end]==' ')end--;
else{
int start=end;
while(start>=0&&s[start]!=' ')start--;
memcpy(str+k,s+start+1,end-start);
k+=end-start;
str[k++]=' ';
end=start-1;
}
}
if(k>=1)
str[k-1]='\0';
else str[k]='\0';
return str;
}
char * longestPrefix(char * s){
int end=strlen(s)-1;
int start=end-1;
char *ret=malloc(100000);
int find=0;
int len=strlen(s)-1;
while(start>=0){
if(s[start]!=s[end])start--;
else{
// int i=0;
// int j=len-start;
// while(i<=start&&s[i]==s[j]){
// i++;
// j++;
// }if(i==start+1)
if(!memcmp(s,s+len-start,start+1))
{
find=1;
memcpy(ret,s,start+1);
ret[start+1]='\0';
break;
}else start--;
}
}
if(find)return ret;
else return "";
}