❤ 作者主页:李奕赫揍小邰的博客
❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~*
🍊 记得点赞、收藏、评论⭐️⭐️⭐️
📣 认真学习!!!🎉🎉
文章目录
交替合并字符串
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。
//方法一:暴力法(内存消耗高)
class Solution {
public String mergeAlternately(String word1, String word2) {
char p1[]=word1.toCharArray(); //将两个字符串转换为数组形式
char p2[]=word2.toCharArray();
int length1=word1.length();
int length2=word2.length();
char p3[]=new char[length1+length2]; //新建一个char数组
if(length1<=length2){ //根据两个字符串长度比较,进行判断,赋值
for(int i=0,j=0;i<length1;i++){
p3[j++]=p1[i];
p3[j++]=p2[i];
}
for(int i=length1,j=2*length1;i<length2;i++){
p3[j++]=p2[i];
}
}else{
for(int i=0,j=0;i<length2;i++){
p3[j++]=p1[i];
p3[j++]=p2[i];
}
for(int i=length2,j=2*length2;i<length1;i++){
p3[j++]=p1[i];
}
}
return String.copyValueOf(p3); //将数组转换为字符串
}
}
//方法二:双指针
class Solution {
public String mergeAlternately(String word1, String word2) {
int m = word1.length(), n = word2.length();
int i = 0, j = 0;
StringBuilder ans = new StringBuilder(); //stringbuilder是可变字符串对象,可以对字符串进行增加
while (i < m || j < n) { //对两个字符串分别比较按顺序添加
if (i < m) {
ans.append(word1.charAt(i)); //stringbuilder追加字符
++i;
}
if (j < n) {
ans.append(word2.charAt(j));
++j;
}
}
return ans.toString(); //将stringbuilder转换为string
}
}
反转字符串中的元音字母
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。
class Solution {
//利用双指针技巧进行解题
public String reverseVowels(String s) {
char p[]=s.toCharArray();
int n=s.length();
int i=0,j=n-1;
while(i<j){
while(i<n&&!isExit(s.charAt(i))){ //不合符元音字母的就可以跳过,直至找到元音子母
i++;
}
while(j>0&&!isExit(s.charAt(j))){
j--;
}
if(i<j){ //找到两个元音字母后,且满足条件i<j时即可互换
invert(p,i,j);
i++;
j--;
}
}
return String.copyValueOf(p); //或者new String(p);
}
public boolean isExit(char s){
return "aeiouAEIOU".indexOf(s)>-1; //判断该字符串是否存在与元音字符串中
}
public void invert(char p[],int i,int j){
char s=p[i];
p[i]=p[j];
p[j]=s;
}
}