一、题目
给你一个偶数长度的字符串 s
。将其拆分成长度相同的两半,前一半为 a
,后一半为 b
。
两个字符串 相似 的前提是它们都含有相同数目的元音('a
','e
','i
','o
','u
','A
','E
','I
','O
','U
')。注意,s
可能同时含有大写和小写字母。
如果 a
和 b
相似,返回 true
;否则,返回 false
。
二、示例
2.1> 示例 1:
【输入】s = "book"
【输出】true
【解释】a = "bo" 且 b = "ok" 。a 中有 1 个元音,b 也有 1 个元音。所以,a 和 b 相似。
2.2> 示例 2:
【输入】s = "textbook"
【输出】false
【解释】a = "text" 且 b = "book" 。a 中有 1 个元音,b 中有 2 个元音。因此,a 和 b 不相似。注意,元音 o 在 b 中出现两次,记为 2 个。
提示:
2
<= s.length <=1000
s.length
是偶数s
由 大写和小写 字母组成
三、解题思路
根据题目描述,字符串s的长度是偶数,所以我们除2之后,得到字符串s一半的长度,肯定是个整数。那么我们需要做如下4个步骤:
【步骤1】将
10
个元音字符
保存到数组yy
【步骤2】获取前一半a
和后一半b
的长度range
,即:range=s.length()/2;
【步骤3】同时遍历a
和b
,a的遍历下标是i,b 的遍历下标是i+range;如果发现a中存在元音字符
,则yc1加1;如果发现b中存在元音字符
,则yc2加1;
【步骤4】遍历完毕后,如果yc1等于yc2
,则返回true;否则返回false;
具体操作,如下图所示:
四、代码实现
4.1> 采用数组确定是否存在元音
class Solution {
public boolean halvesAreAlike(String s) {
int[] yy = new int[123];
yy['a'] = yy['e'] = yy['i'] = yy['o'] = yy['u'] = yy['A'] = yy['E'] = yy['I'] = yy['O'] = yy['U'] = 1;
int range = s.length() / 2, yc1 = 0, yc2 = 0;
for (int i = 0; i < range; i++) {
if (yy[s.charAt(i)] == 1) yc1++;
if (yy[s.charAt(i + range)] == 1) yc2++;
}
return yc1 == yc2;
}
}
4.2> 采用字符串的indexOf确定是否存在元音
class Solution {
public boolean halvesAreAlike(String s) {
String yy = "aeiouAEIOU";
int range = s.length() / 2, yc1 = 0, yc2 = 0;
for (int i = 0; i < range; i++) {
if (yy.indexOf(s.charAt(i)) != -1) yc1++;
if (yy.indexOf(s.charAt(i + range)) != -1) yc2++;
}
return yc1 == yc2;
}
}
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」