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);
}
}
总结
以上就是今天的每日刷题打卡,主要是学习到了字符串和字符数组间的转换和使用,欢迎大家一起学习打卡。