链接:http://ica.openjudge.cn/zz/2/
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
-
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和tab),如果这样的字符不止一个,则输出第一个
- 输入
-
首先输入N,即测试数据的组数
每组测试数据输入:
一行,一个不包含空白字符的字符串,字符串长度小于200 - 输出
- 一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开
- 样例输入
-
2
aaaaabbbbbcccccccdddddddddd
abcdefghigk - 样例输出
-
d 10
a 1
代码一:不用指针
1 #include<stdio.h>
2 #include<string.h>
3 int main(int argc, char *argv[])
4 {
5 int n,i,j,k,maxIndex;
6 char str[205];
7 char count1[205];
8 int count2[205];
9
10 freopen("data.in","r",stdin);
11 scanf("%d",&n);
12 for(i=0;i<n;i++)
13 {
14 scanf("%s",str);
15 //memset(count1,' ',sizeof(count1));
16 //memset(count2,0,sizeof(count2));
17 j=0;
18 count1[j]=str[0];
19 count2[j]=1;
20 for(k=1;str[k]!='\0';k++)
21 {
22 if(str[k]==count1[j])
23 {
24 count2[j]++;
25 }
26 else
27 {
28 j++;
29 count1[j]=str[k];
30 count2[j]=1;
31 }
32 }
33
34 maxIndex=0;
35 for(k=1;k<=j;k++)
36 {
37 if(count2[k]>count2[maxIndex])
38 {
39 maxIndex=k;
40 }
41 }
42 printf("%c %d\n",count1[maxIndex],count2[maxIndex]);
43 }
44 return 0;
45 }
代码二:用指针和链表。头插法构造链表
1 #include<stdio.h>
2 #include<stdlib.h>
3 struct obj
4 {
5 char ch;
6 int num;
7 struct obj *next;
8 };
9 int main(int argc, char *argv[])
10 {
11 int n,i,j,k;
12 char str[205];
13 struct obj *head,*temp,*p;
14 char maxCh;
15 int maxNum;
16 freopen("data.in","r",stdin);
17 scanf("%d",&n);
18 for(i=0;i<n;i++)
19 {
20 scanf("%s",str);
21
22 head=temp=p=NULL;
23
24 temp=(struct obj *)malloc(sizeof(struct obj));
25 temp->ch=str[0];
26 temp->num=1;
27 temp->next=NULL;
28 head=temp;
29 for(j=1;str[j]!='\0';j++)
30 {
31 if(str[j]==head->ch) head->num=head->num+1;
32 else
33 {
34 temp=(struct obj *)malloc(sizeof(struct obj));
35 temp->ch=str[j];
36 temp->num=1;
37 temp->next=NULL;
38
39 temp->next=head;
40 head=temp;
41 }
42 }
43
44
45 p=head;
46 maxCh=head->ch;
47 maxNum=head->num;
48 while(p!=NULL)
49 {
50 if(p->num>=maxNum)//注意:这里要有等号,因为题目要求多个相等值选第一个输出。这里是头插法,选最后一个输出即可。
51 {
52 maxNum=p->num;
53 maxCh=p->ch;
54 }
55 p=p->next;
56 }
57 printf("%c %d\n",maxCh,maxNum);
58
59 p=head;
60 while(p!=NULL)
61 {
62 temp=p;
63 p=p->next;
64 free(temp);
65 }
66 }
67 return 0;
68 }