一、题目链接
http://noi.openjudge.cn/ch0107/25/
二、解题思路(Java)
◆ public String longestWord(String text)方法返回text中第一个最长的单词:
◎ 利用replace方法将text中的逗号替换为空格,生成新字符串str;
◎ 利用split方法,以空格为分割符将str分割为单词集合words;
◎ 定义整数int max_pos = 0,也即初始时假设位置0上的单词是最长单词;
◎ 通过位置i,依次遍历第二个单词至最后一个单词,循环i处理如下:
→ 如果words[i].length() > words[max_pos].length(),也即当前单词的长度大于最长单词的长度,则令max_pos = i,将max_pos更
新为当前单词的位置;
上述循环i结束后,max_pos存储了text中第一个最长单词的位置;
◎ 返回words[max_pos]。
◆ public String shortestWord(String text)方法返回text中第一个最短的单词:
◎ 利用replace方法将text中的逗号替换为空格,生成新字符串str;
◎ 利用split方法,以空格为分割符将str分割为单词集合words;
◎ 定义整数int min_pos = 0,也即初始时假设位置0上的单词是最短单词;
◎ 通过位置i,依次遍历第二个单词至最后一个单词,循环i处理如下:
→ 如果!words[i].isEmpty() && words[i].length() < words[min_pos].length(),也即当前单词非空且长度小于最短单词的长度,
则令min_pos = i,将min_pos更新为当前单词的位置;
上述循环i结束后,min_pos存储了text中第一个最短单词的位置;
◎ 返回words[min_pos]。
◆ public void printAnswer(String text)方法分两行输出text中的第一个最长单词和第一个最短单词:
◎ 调用longestWord方法输出text中第一个最长单词;
◎ 调用shortestWord方法输出text中第一个最短单词。
◆ public static void main(String[] args)方法执行程序:
◎ 输入指定字符串text;
◎ 调用printAnswer方法输出结果。
三、解题思路(C++)
四、Java程序
import java.util.Scanner;
public class Main {
public String longestWord(String text) {
String str = text.replace(',', ' ');
String[] words = str.split(" ");
int max_pos = 0;
for (int i = 1; i < words.length; i++) {
if (words[i].length() > words[max_pos].length()) {
max_pos = i;
}
}
return words[max_pos];
}
public String shortestWord(String text) {
String str = text.replace(',', ' ');
String[] words = str.split(" ");
int min_pos = 0;
for (int i = 1; i < words.length; i++) {
if (!words[i].isEmpty() && words[i].length() < words[min_pos].length()) {
min_pos = i;
}
}
return words[min_pos];
}
public void printAnswer(String text) {
System.out.println(longestWord(text));
System.out.print(shortestWord(text));
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
String text = input.nextLine();
test.printAnswer(text);
}
}
五、C++程序