1279: Wallace and His Pet

题目

  给出一句话(英文),单词总数不超过1000,每个单词不超过10个字符,一句话只有一个唯一的字符“.”(句点)。将这句话中出现的最多的单词替换成“guagua”。更多内容点击标题。

分析

  1. 不区分大小写,这很关键。
  2. 统计频率很简单,循环遍历整句话就可以。
  3. 句子末尾有个句点,我用的next()读取的字符串(单词),因此句点会和最后一个单词保存在一起。要去掉这个点。
  4. 输出最后没有空格,有句点。记得换行。

代码

/**
* 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();
} }

写在最后:

  1. 如需转载,请于标题下注明链接形式的wowpH的博客即可;
  2. 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。
  3. 如果有疑问欢迎评论留言,尽力解答。

WUSTOJ 1279: Wallace and His Pet(Java)的更多相关文章

  1. WUSTOJ 1235: 计算矩阵的鞍点(Java)

    1235: 计算矩阵的鞍点 题目   输出二维数组中行上为最大,列上为最小的元素(称为鞍点)及其位置(行列下标).如果不存在任何鞍点,请输出"404 not found"(不带引号 ...

  2. WUSTOJ 1276: 峰峰不搞G(Java)

    1276: 峰峰不搞G 题目   给 n 数量的油漆,写出最大的数,每个数对应有油漆的花费.更多内容点击标题. 分析   我读完题,就想到用动态规划,结果是Time Limit Exceed.然后看了 ...

  3. WUSTOJ 1247: 递增或递减排序(Java)

    1247: 递增或递减排序 题目   有n个整数,求它的递增排序序列或递减排序序列.更多内容点击标题. 分析 统一升序排序,输出的时候做区分. 先区分是升序还是降序,调用库函数. 代码   方法1,将 ...

  4. 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}, ...

  5. WUSTOJ 1311: 开心的金明(Java)动态规划-01背包

    题目链接:

  6. WUSTOJ 1307: 校门外的树(Java)

    题目链接:

  7. WUSTOJ 1302: 区间k大数查询(Java)

    题目链接:

  8. WUSTOJ 1346: DARK SOULS(Java)并查集

    题目链接:1346: DARK SOULS 并查集系列:WUSTOJ 1319: 球(Java)并查集 Description CQ最近在玩一款游戏:DARK SOULS,这是一款以高难度闻名的硬派动 ...

  9. WUSTOJ 1324: Base64 Coding(Java)未解决,求题解

    题目链接:1324: Base64 Coding 资料:ASCII码表 原文是英文,而且篇幅较长.因此下面不粘贴原文,只写中文大意. Description Base64是一种编码算法.它的工作原理是 ...

随机推荐

  1. Hadoop 安装(本地、伪分布、分布式模式)

    本地模式 环境介绍 一共三台测试机 master   192.168.4.91 slave1   192.168.4.45 slave2   192.168.4.96 操作系统配置 1.Centos7 ...

  2. (转)supervisor

    转载:https://www.cnblogs.com/zhoujinyi/p/6073705.html 进程管理supervisor的简单说明 背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被 ...

  3. 【2018.07.28】(字符串/回文串)学习Manacher算法小记

    主要是应用在回文串啦,原理也理解了老半天,如果没有图片的话,我也看不太懂它的原理 学习的灵感来源来自于:https://segmentfault.com/a/1190000008484167 /* 最 ...

  4. postgresql 计算时间差的秒数、天数

    处理时间时用到了,记录一下. 计算时间差天数 select extract(day FROM (age('2017-12-10'::date , '2017-12-01'::date))); 计算时间 ...

  5. 配置 阿里云ECS Ubuntu 16.04 64bit 桌面环境

    1. 步骤 安装软件 修改root权限 重启 2. 详情 1. 安装软件 创建脚本文件(例如:desktopSetting.sh),并输入以下内容: #!/bin/bash #更新软件库 apt-ge ...

  6. Discretized Streams: A Fault-Tolerant Model for Scalable Stream Processing

    https://www2.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-259.pdf Discretized Streams: A Fault-Tol ...

  7. JAVA_SWT 事件的四种写法

    一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...

  8. LC 990. Satisfiability of Equality Equations

    Given an array equations of strings that represent relationships between variables, each string equa ...

  9. angular组件数据

    import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-news', templateUrl: ' ...

  10. Windows 10、Ubuntu 18.04 双系统 双硬盘 安装经验总结

    首先说明,我假设读者懂得分区.安装系统,所以不再深入讨论具体操作. 如果需要手把手教程,建议先参考其它Windows中加装Linux的相关文章. 网上其它文章.教程的常见问题是,各家机器配置不一样,安 ...