一起来刷题:刷题打卡第二天

133 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

题目一 判定是否互为字符重排

一、题目描述:

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca" 输出: true

示例 2:

输入: s1 = "abc", s2 = "bad" 输出: false

说明:

0 <= len(s1) <= 100, 0 <= len(s2) <= 100

二、思路分析:

这是一道简单题,根据题目描述,我们只需要检查两个字符串是否含有相同的字符和数量即可。

首先如果两个字符串的长度不同,一定返回false。

可以使用散列表计数,使用128大小的int数组分别记录每一个字符出现的次数,然后再对比两个数组即可。

这是我第一时间想到的做法,很简单也很容易想到。

其次我们还可以先将字符串转为char数组,然后进行排序,再比较每一下标下的字符是否相等即可。

三、AC 代码:

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if(s1.length()!=s2.length()) return false;

        char[] ch1=s1.toCharArray();
        char[] ch2=s2.toCharArray();
        Arrays.sort(ch1);
        Arrays.sort(ch2);

        for(int i=0;i<ch1.length;i++){
            if(ch1[i]!=ch2[i]){
                return false;
            }
        }
        return true;
    }
}

题目二 :URL化

一、题目描述:

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例 1:

输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"

示例 2:

输入:" ", 5 输出:"%20%20%20%20%20"

说明:

字符串长度在 [0, 500000] 范围内。

二、思路分析:

这也是一道简单题,根据题目描述,字符串的“真实”长度就是需要遍历的字符数,而后面多余的空格就是所谓的可以存放新字符的空间。

这题我的第一思路就是创建一个3倍字符串长度的char数组,然后遇到空格就转为%20,如果所有的代码都是空格那么字符数组大小也刚好,然后我仔细一看题目,后边有足够的空间来存储新增的%20,所以只需要创建一个字符串长度大小的字符数组即可。

遍历字符数组,遇到空格新增%20三个字符,不是空格则不变,最后使用new String()来将字符数组截取成字符串返回。其中第二个参数代表起始下标,第三参数代表结束下标(不包含),因为最后一次j++了,所以最后j是最后一个字符的下一位。

三、AC 代码:

class Solution {
    public String replaceSpaces(String S, int length) {
        char[] ch = new char[S.length()];
        int j=0;
        for(int i=0;i<length;i++){
            if(S.charAt(i)==' '){
                ch[j]='%';
                ch[j+1]='2';
                ch[j+2]='0';
                j+=3;
            }else{
                ch[j]=S.charAt(i);
                j++;
            }
        }
        return new String(ch,0,j);
    }
}

总结

以上就是今天的每日刷题打卡,主要是学习到了字符串和字符数组间的转换和使用,欢迎大家一起学习打卡。