HDU1004题解分析(字符串处理)
这道题是从上个星期开始做的,看到题时觉得似曾相似,好像做过,理了一下思路敲完代码又不对,后来发现是数组用错了,之后又重新想了数组和比较用法,昨天改了一个多小时,后来样例输出全部正确,所有情况都考虑到了,还是WA,今天上午搜了一下代码,测了一下样例,发现当所有输入不一样时,输出一个即可,是我把这种情况考虑多了,我考虑的是当所有输入不一样时,不输出,改完之后立马就AC了,我只想说:我又想多了,,,,,,
题意:给出N组字符串,判断哪一个字符串出现的次数最多,并输出该字符串。当N=0时,表示结束。
输入:N代表有几个字符串,然后输入字符串
输出:一组字符串中出现最多的一个
思路:首先考虑用C++中的string数组来处理比较简单,然后定义一个string s[1000]来存放字符串和一个int型的a数组来记录每个字符串出现的次数,并把a[i]的值设为0。string s[1000]中从i=0,j=0开始利用双重for循环来比较,if(s[i]==s[j])就让a[i]++,表示该字符串出现一次,然后依次判断每个字符串,当然如果该字符串出现多次,每一个不同位置的相同字符串出现次数一样多,不影响次数的判断。然后判断a[i中]哪个最大,也就表示s数组中哪个字符串出现的次数最多,把i赋值给k,输出s[k],程序结束。
特殊情况考虑:当所有字符串只出现一次,也就是max=1时,应该怎么办? 答案是:输出其中一个,我的程序中是输出了第一个。(刚开始WA就是错在这)
代码解释:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s[1000]; //定义字符串数组和整型数组
int a[1000];
int n;
while(cin>>n) //输入n表示有n个字符串
{
if(n==0) //当n=0时,表示程序结束
return 0;
for(int i=0;i<n;i++) //输入n个字符串,并把a[i]设为0
{
cin>>s[i];
a[i]=0;
}
for(i=0;i<n;i++) //双重for循环判断字符串出现次数,并用a[i]来记录
{
for(int j=0;j<n;j++)
{
if(s[i]==s[j])
a[i]++;
}
}
int max=0, k;
for(i=0;i<n;i++) //设最大值max=0,判断a[i]的最大值即出现最多次,把最大值的下标i赋值给k
{
if(max<a[i])
{
max=a[i];
k=i;
}
} //本来加了一个if(max==1)的判断 即当所有的字符串只出现一次 return 0,结果是错的
cout<<s[k]<<endl;
}
return 0;
}
说了这么多,不知道大家理解木有,这道题其实是道水题,只不过对于我来说可能要多考虑一些时间,水平有限,大家将就着看吧
贴一个比较好的代码,容易理解,以作参考
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
string str[1001];
for(int i=1;i<=n;i++)
{
cin>>str[i];
}
sort(str+1, str+n+1);
int sum[1001];
for( i=1;i<=n;i++)
sum[i]=1;
int max=1;
for( i=2;i<=n;i++)
{
if(str[i]==str[i-1])
{
sum[i]+=sum[i-1];
}
if(sum[i]>=sum[max])
max=i;
}
cout<<str[max]<<endl;
}
return 0;
}
HDU1004题解分析(字符串处理)的更多相关文章
- leetCode 题解之字符串中第一个不重复出现的字符
1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doe ...
- Redis 数据类型分析 字符串 哈希 列表 集合 有序集合 优缺点 分析 注意事项 存储结构
一.提高Redis使用性能秘诀 KEY尽量少的原则,能放在1个KEY的就放入1个KEY,KEY开销很大尽量减少与Redis发生的交互次数,能批量的就批量,能事务.管道的就事务.管道从业务架构分析确定使 ...
- HDU 1880 题解(字符串哈希)
题面: 魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 2023题解分析
我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧. ...
- 11.15 gryz校测(题解分析报告)
T1 心有灵犀 (cooperate) 题目大意 给你一个不超过 \(10^9\) 的数字 \(n\) 和一个交换次数上限 \(k\), 每次操作对这个 数字 \(n\) 的其中两位进行交换, 比如 ...
- 用javap命令反编译来分析字符串问题
编写Test.java.编译完后生成Test.class文件,然后对该文件运行javap -c Test命令,生成字节码指令.阅读并得出结论 一.s1和s2指向常量池的不同常量 ①java代码 pub ...
- C语言-字符串典型问题分析
1.典型问题一 下面的程序输出什么为什么? #include <stdio.h> int main() { ] = {}; char src[] = ...
- #P4770 [NOI2018]你的名字 的题解
题目背景 实力强大的小A 被选为了ION2018 的出题人,现在他需要解决题目的命名问题. 题目描述 小A 被选为了ION2018 的出题人,他精心准备了一道质量十分高的题目,且已经把除了题目命名以外 ...
- 剑指 Offer 67. 把字符串转换成整数 + 字符串
剑指 Offer 67. 把字符串转换成整数 Offer_67 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...
随机推荐
- jquery.validate 一些技巧
1.Validator.element() Validates a single element, returns true if it is valid, false otherwise. http ...
- RedisService
package com.sprucetec.bone.common.redis;import com.alibaba.fastjson.JSON;import org.springframework. ...
- 一些tcp通讯代码
1,nginx-lua 需要设置nginx配置文件 resolver 223.5.5.5 223.6.6.6; lua_package_path "/usr/local/nginx/conf ...
- 网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现
现在很多for Mobile的H5网页内都有快速滚动和回弹的效果,看上去和原生app的效率都有得一拼. 要实现这个效果很简单,只需要加一行css代码即可: -webkit-overflow-scrol ...
- [置顶] .NET下枚举类型的Save和Load分析
今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...
- c 跟字符串有关的函数
1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...
- iOS中UIWebView使用JS交互 - 机智的新手
iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...
- JavaBean组件在JSP文档中的应用
Bean: package cn.donghaua.bean; public class StringBean { private String message = "No message ...
- 如何实现HTTPSERVER
Write your own http server author : Kevin Lynx Why write your own? 看这个问题的人证明你知道什么是http server,世界上有很多 ...
- 0610 python 基础03
复习: 条件判断 if..else >>> age=28 >>> if age<18: ... print "你还没有成年吧" ... ...