给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半,前一半为 a ,后一半为 b 。
两个字符串 相似 的前提是它们都含有相同数目的元音(‘a’,‘e’,‘i’,‘o’,‘u’,‘A’,‘E’,‘I’,‘O’,‘U’)。注意,s 可能同时含有大写和小写字母。
如果 a 和 b 相似,返回 true ;否则,返回 false 。
示例 1:
输入:s = “book”
输出:true
解释:a = “bo” 且 b = “ok” 。a 中有 1 个元音,b 也有 1 个元音。所以,a 和 b 相似。
示例 2:
输入:s = “textbook”
输出:false
解释:a = “text” 且 b = “book” 。a 中有 1 个元音,b 中有 2 个元音。因此,a 和 b 不相似。
注意,元音 o 在 b 中出现两次,记为 2 个。
2 <= s.length <= 1000
s.length 是偶数
s 由 大写和小写 字母组成
Java字符串
《Java编程思想》P288-289展示了String对象具备的一些基本方法
使用的方法有s.length(),s.toUpperCase(),s.substring(),s.charAt(i),Object.equals(a,b)
s.length()获取字符串s的长度
s.toUpperCase()将字符串所有字符变为大写
s.substring(起始位置,终止位置)和 s.substring(起始位置)是重载的版本;注意终止位置的字符不会被包含在内
s.charAt(i)获得s字符串第i个位置的字符;注意字符位置从0开始计算
a.equals(b),用于比较两个对象内容是否相同;注意“==”和“!=”关系操作符进行比较的是对象的引用,而不是内容;注意基本类型使用关系操作符,不能使用equals()方法,比较所有非基本类型的对象的实际内容是否相同时,必须使用equals()方法。(基本类型有Boolean,char,byte,short,int,long,float,double,void;基本类型不使用new来进行创建变量,而是创建一个非引用的变量,直接存储值,并置于堆栈中)
class Solution {
public boolean halvesAreAlike(String s) {
Integer i= 0;
Integer j= 0;
Integer leftflag = 0;
Integer rightflag = 0;
char tmp = '0';
boolean ret = false;
//1.将元音都放到数组里,方便查找。('a','e','i','o','u','A','E','I','O','U')
char vowel[] = {'A','E','I','O','U'};
//2.确定从哪里开始分开字符串的左右两边
//获取字符串长度存为len
int len = s.length();
//将s全部改为大写
s = s.toUpperCase();
//3.将字符串的左右两边各有多少元音字母计数(注意大小写都是元音)
//sleft字符串为s左半部分的子字符串,sright字符串为s右半部分的子字符串
String sleft = s.substring(0,len/2);
String sright = s.substring(len/2);
for(i=0;i<sleft.length();i++)
{
tmp = sleft.charAt(i);
for(j=0;j<vowel.length;j++){
if(tmp==vowel[j]){
leftflag++;
}
}
}
for(i=0;i<sright.length();i++)
{
tmp = sright.charAt(i);
for(j=0;j<vowel.length;j++){
if(tmp==vowel[j]){
rightflag++;
}
}
}
//4.比较两个元音字母个数,返回true或者flase
if(leftflag.equals(rightflag)) return true;
else return false;
}
}
python3字符串
字符串不可更改,所有操作都是生成副本
使用单引号和双引号标注字符串都可以
\反斜杠用于转义字符
如果不想使用\转义,在字符串引号前面加r,这样的字符串是原始字符串
使用三重引号‘’‘……’‘’可以在字符串中包含多行
字符串可以使用+连接,使用*重复(eg.‘f’+2 * ‘o’+‘t’ 输出为foot)
相邻的字符串会自动合并(eg.‘f’ 'oot’输出 foot),只有字面值如此,变量不能自动合并,要使用+连接
字符串索引是下标,从0开始。
索引支持负数,负数是从右往左计数,负数索引从-1开始
获取子字符串使用字符串名[起始下标:终止下标]形式(eg.word=‘python’,word[0:2]=‘py’),注意这里终止下标是不被包含在内的。默认的起始下标是0
len()返回字符串长度
python3列表
列表可以支持不同类型的元素,但一般都是相同类型的元素。形式如下:squares = [1, 4, 9, 16, 25]
列表支持下标索引和切片
合并操作使用+
内容可以改变,append() 方法可以在列表中加入新元素(eg.append(111) 生成结果是squares = [1, 4, 9, 16, 25,111])
更改列表切片会使得列表改变(eg.squares[1:3]=[] 生成结果是squares = [1,16, 25,111])
可以嵌套列表(eg. a=[‘a’,‘b’,‘c’] b=[‘1’,‘2’] 则s=[a,b]为s=[[‘a’,‘b’,‘c’] ,[‘1’,‘2’]] 则s[0]=[‘a’,‘b’,‘c’] s[0][1]=‘b’)
class Solution(object):
def halvesAreAlike(self, s):
"""
:type s: str
:rtype: bool
"""
i,j = 0,0
#1. 将元音都放到数组里,方便查找。('a','e','i','o','u','A','E','I','O','U')
vowel = ['a','e','i','o','u','A','E','I','O','U']
ret = False
#2.确定从哪里开始分开字符串的左右两边
length = len(s)
left,right = 0,0
# 3. 将字符串的左右两边各有多少元音字母计数(注意大小写都是元音)
for sword in s:
j=0
for v in vowel:
if s[i]==vowel[j]:
if i<length//2: left=left+1
if i>=length//2: right=right+1
j=j+1
i=i+1
# 4. 比较两个元音字母个数,返回true或者flase
if left==right: ret=True
return ret
C语言中,字符串是以\0结尾的一维字符数组,初始化可以写成char site[] = “RUNOOB”;
C语言提供许多字符串函数
strcpy(s1, s2);复制s2到s1
strcat(s1, s2);连接s2到s1末尾
strlen(s1);返回s1长度
strcmp(s1, s2); s1 =s2 返回 0; s1s2 返回> 0
strchr(s1, ch);返回指向 s1 中字符‘ch’ 第一次出现的位置的指针
strstr(s1, s2);返回指向 s1 中字符串s2 第一次出现的位置的指针
bool halvesAreAlike(char * s){
int i=0,j=0;
int left=0,right=0;
bool ret=false;
//1.将元音都放到数组里,方便查找。('a','e','i','o','u','A','E','I','O','U')
char vowel[11] = {'a','e','i','o','u','A','E','I','O','U','\0'};
//2.确定从哪里开始分开字符串的左右两边
int length = strlen(s);
// 3. 将字符串的左右两边各有多少元音字母计数(注意大小写都是元音)
for(i=0;i<length;i++)
{
for(j=0;j<strlen(vowel);j++)
{
if(s[i]==vowel[j])
{
if(i<length/2) left++;
else right++;
}
}
}
//4. 比较两个元音字母个数,返回true或者flase
if(left==right) ret=true;
return ret;
}
C++支持C语言风格的字符串
C++还提供了string类,在支持C语言函数以外还增加了许多功能
初始化写法为 string s1 = “hello”; 或者string s1(“hello”);或者string s2(10, ‘a’);
连接字符串写法为 s3=s1+s2
获取字符串长度使用s.size()或s.length()
将一个字符串赋值给另一个字符串使用 s2=s1
在一个string对象后附加另一个string对象可以使用+=或者s.append() 函数
在一个string对象后附加一个字符可以使用s.push_back(‘a’)
比较两个string对象可以直接使用==,也可以使用s.compare() 方法
使用s.substr(起始位置,子串长度)来获取子串
获取字符串某一位置的字符可以使用是s[位置]也可以使用s.at(位置)
查找字符可以使用 s.find() 方法,返回值为第一个该字符的下标
从字符串末尾往前查找字符可以使用s.rfind(),返回值为最后一个该字符的下标
从字符串任意位置往后查找字符可以使用s.find_first_of(位置) 方法,不填写参数默认从0开始查找
获取str输入可以使用 getline(cin,str) 函数
使用 s.empty() 函数判断字符串是否为空
使用 s.swap() 函数交换两个字符串
public:
bool halvesAreAlike(string s)
{
int i=0,j=0;
int left=0,right=0;
bool ret=false;
//1.将元音都放到数组里,方便查找。('a','e','i','o','u','A','E','I','O','U')
string vowel = "aeiouAEIOU";
//2.确定从哪里开始分开字符串的左右两边
int length = s.size();
string s1=s.substr(0,length/2);
string s2=s.substr(length/2,length);
// 3. 将字符串的左右两边各有多少元音字母计数(注意大小写都是元音)
for(j=0;j