WUSTOJ 1279: Wallace and His Pet(Java)
1279: Wallace and His Pet
题目
给出一句话(英文),单词总数不超过1000,每个单词不超过10个字符,一句话只有一个唯一的字符“.”(句点)。将这句话中出现的最多的单词替换成“guagua”。更多内容点击标题。
分析
- 不区分大小写,这很关键。
- 统计频率很简单,循环遍历整句话就可以。
- 句子末尾有个句点,我用的next()读取的字符串(单词),因此句点会和最后一个单词保存在一起。要去掉这个点。
- 输出最后没有空格,有句点。记得换行。
代码
/**
* time 730ms
* @author PengHao
* @version A1.1
* @date 2019-04-22 下午5:10:22
*/
import java.util.Scanner;
public class Main {
private Scanner sc;
private int MAX_WORD = 1001; // 最多1000个单词,下标从1开始
private int numOfWords; // 每行的单词个数
private String[] words; // 每行的单词
private boolean[] visited; // 访问标志,单词统计过就设为true
private String mostWords; // 频率最高的单词
public Main() {
sc = new Scanner(System.in);
words = new String[MAX_WORD]; // 单词
visited = new boolean[MAX_WORD]; // 访问标志
int T = sc.nextInt(); // 数据组数
while ((T--) > 0) {
input(); // 输入
initVisited(); // 初始化访问标志
mostWords = findMostWord(); // 获取频率最高的单词
output(); // 输出
}
sc.close();
}
/**
* Input Words.
*/
private void input() {
numOfWords = 0;
char end; // 单词的最后一个字符
do {
words[++numOfWords] = sc.next();
end = words[numOfWords].charAt(words[numOfWords].length() - 1);
} while ('.' != end); // 不是'.',就继续输入
// 去掉最后一个单词的点'.'
words[numOfWords] = words[numOfWords].replace(".", "");
}
/**
* Initializes the access flag.
*/
private void initVisited() {
for (int i = 1; i <= numOfWords; i++) {
visited[i] = false;
}
}
/**
* @return 频率最高的单词
*/
private String findMostWord() {
String mostW = ""; // 频率
int mostNum = 0; // 初始最高频率为0
String currentWord; // 当前单词
int currentNum; // 当前单词个数
for (int i = 1; i <= numOfWords; i++) {
if (visited[i]) { // 如果这个单词已经统计过,直接跳过
continue;
}
currentWord = words[i].toLowerCase(); // 当前单词变成小写
currentNum = 1; // 当前单词出现1次
visited[i] = true; // 当前单词设为已经统计过
// 检查这个单词在后面是否出现
for (int j = i + 1; j <= numOfWords; j++) {
// 第j个单词和当前单词一样
if (words[j].toLowerCase().contentEquals(currentWord)) {
currentNum++; // 个数加1
visited[j] = true; // 设为已经统计过
}
}
if (currentNum > mostNum) { // 当前单词的频率比最高的单词频率更高
mostW = currentWord; // 更新最高频率单词
mostNum = currentNum; // 更新最高频率单词的频率
}
}
return mostW;
}
/**
* Output
*/
private void output() {
// 前numOfWords-1个单词
for (int i = 1; i < numOfWords; i++) {
// 这个单词是最高频率的单词
if (words[i].toLowerCase().contentEquals(mostWords)) {
System.out.print("guagua "); // 用guagua替换
} else {
System.out.print(words[i] + " "); // 原样输出
}
}
// 最后一个单词
// 这个单词是频率最高的单词
if (words[numOfWords].toLowerCase().contentEquals(mostWords)) {
System.out.println("guagua."); // 用guagua替换
} else {
System.out.println(words[numOfWords] + ".");
}
}
public static void main(String[] args) {
new Main();
}
}
写在最后:
- 如需转载,请于标题下注明链接形式的wowpH的博客即可;
- 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。
- 如果有疑问欢迎评论留言,尽力解答。
WUSTOJ 1279: Wallace and His Pet(Java)的更多相关文章
- WUSTOJ 1235: 计算矩阵的鞍点(Java)
1235: 计算矩阵的鞍点 题目 输出二维数组中行上为最大,列上为最小的元素(称为鞍点)及其位置(行列下标).如果不存在任何鞍点,请输出"404 not found"(不带引号 ...
- WUSTOJ 1276: 峰峰不搞G(Java)
1276: 峰峰不搞G 题目 给 n 数量的油漆,写出最大的数,每个数对应有油漆的花费.更多内容点击标题. 分析 我读完题,就想到用动态规划,结果是Time Limit Exceed.然后看了 ...
- WUSTOJ 1247: 递增或递减排序(Java)
1247: 递增或递减排序 题目 有n个整数,求它的递增排序序列或递减排序序列.更多内容点击标题. 分析 统一升序排序,输出的时候做区分. 先区分是升序还是降序,调用库函数. 代码 方法1,将 ...
- WUSTOJ 1338: The minimum square sum(Java)
题目链接:1338: The minimum square sum Description Given a prime p(p<108), you are to find min{x2+y2}, ...
- WUSTOJ 1311: 开心的金明(Java)动态规划-01背包
题目链接:
- WUSTOJ 1307: 校门外的树(Java)
题目链接:
- WUSTOJ 1302: 区间k大数查询(Java)
题目链接:
- WUSTOJ 1346: DARK SOULS(Java)并查集
题目链接:1346: DARK SOULS 并查集系列:WUSTOJ 1319: 球(Java)并查集 Description CQ最近在玩一款游戏:DARK SOULS,这是一款以高难度闻名的硬派动 ...
- WUSTOJ 1324: Base64 Coding(Java)未解决,求题解
题目链接:1324: Base64 Coding 资料:ASCII码表 原文是英文,而且篇幅较长.因此下面不粘贴原文,只写中文大意. Description Base64是一种编码算法.它的工作原理是 ...
随机推荐
- (转)hadoop 集群常用端口
转载于:https://www.cnblogs.com/liying123/p/7097806.html hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于 ...
- [WEB安全]Weblogic漏洞总结
0x01 Weblogic简介 1.1 叙述 Weblogic是美国Oracle公司出品的一个应用服务器(application server),确切的说是一个基于Java EE架构的中间件,是用于开 ...
- [CSP-S模拟测试]:跳房子(模拟)
题目描述 跳房子,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一.跳房子是在$N$个格子上进行的,$CYJ$对游戏进行了改进,该成了跳棋盘,改进后的游戏是在一个$N$行$M$列的棋盘上进行,并 ...
- 20165223《网络对抗技术》Exp 9 Web安全基础
目录 -- Web安全基础 ★ 实验说明 实验目标 基础问答 实验准备 ★ 实验内容 SQL注入攻击 1. 命令注入(Command Injection) 2. 数字型注入(Numeric SQL I ...
- 咏南中间件D7客户端演示
咏南中间件D7客户端演示 咏南中间件MORMOT(http.sys)支持D6.D7等老版本开发客户端.客户端使用TClientDataSet内存表控件,数据序列使用TynSerial类.
- 遇到多个构造器参数时要考虑用构建器 builder 模式 JavaBean 线程安全
effective java p9 JavaBeans模式阻止了把类做成不可变的可能,这需要程序员付出额外的努力来确保它的线程安全.
- 如何交叉编译curl?
1. 先准备一下openssl库 编译openssl库的方法在此 2. 获取curl源码 wget https://curl.haxx.se/download/curl-7.65.3.tar.gz 2 ...
- Golang基础笔记
<基础> Go语言中的3个关键字用于标准的错误处理流程: defer,panic,recover. 定义一个名为f 的匿名函数: Go 不支持继承和重载. Go的goroutine概念:使 ...
- main方法的详解
格式 * public static void main(String[] args) {} 针对格式的解释 public 被jvm调用,访问权限足够大. static 被jvm调用,不用创建对象,直 ...
- Flutter中的事件广播event_bus的基本使用
官方包参考地址: https://pub.dev/packages/event_bus https://github.com/marcojakob/dart-event-bus 1.pubspec.y ...