一、题目描述
相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外)+e,常见的单词有life,time,woke,coke,joke,note,nose,communicate,use,gate,same,late等。
给定一个字符串,以空格为分隔符,反转每个单词中的字母,若单词中包含如数字等其他非字母时不进行反转。
反转后计算其中含有相对开音节结构的子串个数(连续的子串中部分字符可以重复)。
二、输入描述
字符串,以空格分割的多个单词,字符串长度<10000,字母只考虑小写。
三、输出描述
含有相对开音节结构的子串个数,注:个数<10000
四、解题思路
- 定义一个正则表达式regular1,用于判断是否只包含字母;
- 定义一个正则表达式regular2,用于判断是否是相对开音节(辅音+元音(aeiou)+辅音(r除外)+e);
- 对于每个单词,首先判断是否只包含字母,如果不是,则跳过该单词;
- 每4个字符取出一个子串;
- 获取符合要求的相对开音节子串;
- 输出含有相对开音节结构的子串个数;
五、Python算法源码
import re
words = input().split()
res = 0
regular1 = re.compile('[^a-zA-Z]')
regular2 = re.compile('[^aeiou][aeiou][^aeiour]e')
for word in words:
# 对于每个单词,首先判断是否只包含字母,如果不是,则跳过该单词
if regular1.search(word) != None:
continue
word = word[::-1]
# print(word)
for i in range(len(word) - 3):
# 每4个字符取出一个子串
if regular2.search(word[i:i + 4]) != None:
# 相对开音节子串
print(word[i:i+4])
res += 1
print(res)
六、效果展示
1、efil emit ekow
反转之后是life,time,woke
,都是相对开音节子串,因此返回结果3。
2、efil emit 5ekow
反转之后是life,time,5ekow
,因5ekow含非英文字符所以未反转,因此返回结果2。
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。