问题描述
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,
第一段由一个或多个辅音字母组成,
第二段由一个或多个元音字母组成,
第三段由一个或多个辅音字母组成,
第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
解题思路
输出结果无非是两种情况,yes 或 no ,而字母无非就是"元音字母"或者"辅音字母",我们可以转化个思路。
将"元音字母"转化成"1",辅音字母转化为"0",此时的题目就可以变成:
第一段由一个或多个0组成,
第二段由一个或多个1组成,
第三段由一个或多个0组成,
第四段由一个或多个1组成。
最后得到了一串由"0",“1"组成的一个二进制数,
最后看这个二进制数是否满足题目要求的"0-1-0-1"格式,满足输出"yes"否则输出"no”;
例如:
hello 转化后为 “01001” 符合"0-1-0-1"格式,所以输出"yes"
world 转化后为 “01000” 不符合"0-1-0-1"格式,所以输出"no"
package demo;
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0; // 记录输入值的"段"数
String str = sc.next();
String s = str.toLowerCase(); // 将输入值全部转化为小写字母
char[] ch = s.toCharArray();
sc.close();
for (int i = 0; i < ch.length; i++) {
if (ch[i] == 'a' || ch[i] == 'e' || ch[i] == 'i' || ch[i] == 'o'
|| ch[i] == 'u') { // 判断索引值对应的元素是否为“元音字母”
ch[i] = '1'; // 为元音字母时,转成"1"
} else {
ch[i] = '0';
}
}
for (int i = 0; i < ch.length; i++) {
count = 1;
if (ch[0] == '1') { // 当"第一段为"1"时,不合题意,输出no
System.out.println("no");
break;
} else if (ch[ch.length - 1] == '0') { // 同理,最后最后一段为"1"时,不合题意,输出no
System.out.println("no");
break;
} else if (true) {
for (int j = 0; j < ch.length - 1; j++) {
if (ch[j] != ch[j + 1]) { // 当j与j+1处的元素不同时,表示此时已经分段,count加一
count++;
}
}
if (count != 4) { // 判断count是否满足4段
System.out.println("no");
break;
} else {
System.out.println("yes");
break;
}
}
}
}
}