一、题目描述
相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外)+e,常见的单词有life,time,woke,coke,joke,note,nose,communicate,use,gate,same,late等。
给定一个字符串,以空格为分隔符,反转每个单词中的字母,若单词中包含如数字等其他非字母时不进行反转。
反转后计算其中含有相对开音节结构的子串个数(连续的子串中部分字符可以重复)。
二、输入描述
字符串,以空格分割的多个单词,字符串长度<10000,字母只考虑小写。
三、输出描述
含有相对开音节结构的子串个数,注:个数<10000
四、解题思路
- 定义一个列表aeiouList,存储元音字母(a, e, i, o, u);
- 从输入中读取字符串,并按空格分割为多个单词,存储在input数组中;
- 初始化total为0,表示含有相对开音节结构的子串个数;
- 遍历input数组中的每个单词content;
- 对于每个单词,首先判断是否只包含字母,如果不是,则跳过该单词;
- 如果单词只包含字母,则调用checkKai方法计算该单词中含有相对开音节结构的子串个数,并累加到total中;
- 输出total作为结果。
五、Java算法源码
private static final List<Character> aeiouList = new ArrayList<>();
static {
char[] f1 = {'a', 'e', 'i', 'o', 'u'};
for (char c : f1) {
aeiouList.add(c);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(" ");
int total = 0;
for (String content : input) {
boolean flag = true;
for (int j = 0; j < content.length(); j++) {
if (content.charAt(j) < 'a' || content.charAt(j) > 'z') {
flag = false;
break;
}
}
if (flag) {
total += checkKai(content);
}
}
System.out.println(total);
}
private static int checkKai(String str) {
StringBuilder strTemp = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i--) {
strTemp.append(str.charAt(i));
}
int left = 0;
int right = 0;
int total = 0;
String tem = "";
while (right <= str.length()) {
tem = strTemp.substring(left, right);
if (tem.length() < 4) {
right++;
continue;
}
if (check(tem)) {
total++;
}
left++;
right++;
}
return total;
}
private static boolean check(String str) {
if (!aeiouList.contains(str.charAt(0)) && 'e' == str.charAt(str.length() - 1)) {
int temYuan = 0;
for (int i = 1; i < str.length() - 1; i++) {
if (aeiouList.contains(str.charAt(i))) {
temYuan = i;
}
if (temYuan != 0 && !aeiouList.contains(str.charAt(i)) && str.charAt(i) != 'r' && i > temYuan) {
return true;
}
}
}
return false;
}
六、效果展示
1、efil emit ekow
反转之后是life,time,woke
,都是相对开音节子串,因此返回结果3。
2、efil emit 5ekow
反转之后是life,time,5ekow
,因5ekow含非英文字符所以未反转,因此返回结果2。
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。