数组和字符串算法解题集合(持续更新)

❤ 作者主页:李奕赫揍小邰的博客
❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~*
🍊 记得点赞、收藏、评论⭐️⭐️⭐️
📣 认真学习!!!🎉🎉


 

交替合并字符串

  给你两个字符串 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李奕赫揍小邰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值