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是一种编码算法.它的工作原理是 ...
随机推荐
- 1、Kfaka 部署
一.使用Kfaka自带的zookeeper服务. 1.下载Kafka,下载地址: http://kafka.apache.org/downloads 2.区分Kfaka版本: Scala 2.12 - ...
- 史上最好用的依赖注入框架Google Guice【转】
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC).Guice非常小而且快. (其他的依赖注入框架还有Dagger,Spring) Spring ...
- 使用SQL中的update更新多个字段值
使用SQL中的update更新多个字段值,set后面的条件要用逗号不能用and set后面的多个条件之间没有关联也不可以有关联,所以就不能用and了:where 条件后面 可以为and 如: upda ...
- 【零基础】神经网络优化之dropout和梯度校验
一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...
- thymeleaf 直接调用后台Service
前端thymeleaf <select name="sex" class="form-control m-b" th:with="type=${ ...
- centos7 windows7 双系统重新构建引导和启动顺序
安装centos后无法引导启动windows7的解决方法 在电脑Windows7系统上安装Centos7,安装后找不到Windows7引导菜单. 原因:因为CentOS 7已采用新式的grub2系统, ...
- 网站url路径优化方法完全讲解 (url优化、基于tp5、API接口开发)
url优化可是网站开发的必备高阶技能,先看本实例优化前后效果比较: (同为调用前台模块下的index控制器下的index方法) 优化前:www.tp5.com/tp5/public/index.php ...
- Swift_IOS之提示框UIAlertController
import UIKit class ViewController: UIViewController ,UIActionSheetDelegate{ @IBAction func btn1(_ se ...
- Linux交换空间(swap space)的那些优缺点
下面的所有例子都在ubuntu-server-x86_64 16.04下执行通过 什么是swap? swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合.简单点说 ...
- Qt编写自定义控件43-自绘电池
一.前言 到了9102年了,现在智能手机不要太流行,满大街都是,甚至连爷爷奶奶级别的人都会用智能手机,本次要写的控件就是智能手机中的电池电量表示控件,采用纯painter绘制,其实也可以采用贴图,我估 ...