1.求解字符串中出现次数最多的字符,一样多输出小的。
#include<stdio.h>
#include<string.h>
int main(){
int n,i,m=0;
scanf("%d",&n);
while(n--){
char a[1011];
scanf("%s",a);
int b[26]={0};
int k=0,max=0,s;
s=strlen(a);
for(i=0;i<s;i++){
b[a[i]-'a']++;
}
for(i=0;i<26;i++){
if(b[i]>max ){
max=b[i];
m=i;
}
}
printf("%c\n",(m+'a'));
}
return 0;
}
2.最长回文子串
运用中心扩展法,如果一个字符串是回文串,那么以某个字符为中心的前缀和后缀是一样的,我们可以枚举中心位置,然后再该位置上扩展,记录并更新得到最长的回文子串。
int LongestPalindrome(const char *s,int n){
int i,j,max,c;
if(0==s||n<1){
return 0;
}
max=0;
//i为回文的中心位置
for(i=0;(i-j>=0)&&(i+j<n);j++){
if(s[i-j]!=s[i+j]){
break;
} //回文长度为奇数
c=j*2+1;
}
if(c>max){
max=c;
}
for(j=0;(i-j>=0)&&(i+j+1<n);j++){//回文长度为偶数
if(s[i-j]!=s[i+j+1]){
break;
}
c=j*2+2;
}
if(c>max){
max=c;}
return max;
}
3.找出单链表的中间结点,用时间复杂度为O(l/2)。。。。(腾讯面试题)
算法用快慢指针。。。
Status GetMidNode(LinkList L,ElemType *e){
Linklist search,mid;
mid=search=L;
//search的移动速度是mid的两倍
while(search->next!=NULL){
if(search->next->next!=NULL){
search=search->next;
mid=mid->next;
}
else{
search=search->next;
}
}
*e=mid->data;
return ok;
}