class Solution {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length() != s2.length()) return false;
HashMap<Character,Integer>map1=new HashMap<>();
for(int i=0;i<s1.length();i++)
{
map1.put(s1.charAt(i),map1.getOrDefault(s1.charAt(i),0)+1);
}
for(int i=0;i<s2.length();i++)
{
map1.put(s2.charAt(i),map1.getOrDefault(s2.charAt(i),0)-1);
}
for(int val:map1.values())
{
if(val!=0) return false;
}
return true;
}
}
注意HashMap里的getOrDefault函数和values函数
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length() != s2.length()) return false;
char[] array1=s1.toCharArray();
char[] array2=s2.toCharArray();
Arrays.sort(array1);
Arrays.sort(array2);
return Arrays.equals(array1,array2);
//注意equals的用法
}
}
注意排序是用的Arrays.sort()
而且也可以用Arrays来比较两个数组是否相等
class Solution {
public boolean CheckPermutation(String s1, String s2) {
//base case
if(null==s1 || null==s2 || s1.length()!=s2.length()) return false;
// 只使用 异或运算(位运算)会出现(aa bb )这种情况
// 只使用 ASII码值或出现(ac bb )这种情况
int n =0;
int sum1=0;
int sum2=0;
char[] chs1=s1.toCharArray();
char[] chs2=s2.toCharArray();
for(int i=0;i<chs1.length;i++){
sum1+=chs1[i];
sum2+=chs2[i];
n^=chs1[i];
n^=chs2[i];
}
return n==0&&sum1==sum2;
}
}
注意不只要用到异或,还要用ASCII码
但是后序发现
显然异或还是不行,玩魔怔了。
class Solution {
public String replaceSpaces(String S, int length) {
StringBuilder str1=new StringBuilder();
for(int i=0;i<length;i++)
{
char ch=S.charAt(i);
if(ch !=' '){
str1.append(ch);
}
else{
str1.append("%20");
}
}
return str1.toString();
}
}
stringBuilder单线程的增加字母的开销应该是要比string小
当然这个题的本质就是下面这个函数
class Solution {
public String replaceSpaces(String S, int length) {
return S.substring(0,length).replaceAll(" ","%20");
}
}
注意一下substring(a,b)
是截取a到b-1的下标的。
String test = "Hello World !";
String subTest1 = test.substring(0,3);
运行结果如下:
subTest:Hel
假定该字符串尾部有足够的空间存放新增字符,基于题干的这个条件。
这种肯定是从后向前。
class Solution {
public String replaceSpaces(String S, int length) {
char[] array1=S.toCharArray();
int len=S.length()-1; //这里忘记减一,错了一次
for(int i=length-1;i>=0;i--){
if(array1[i]==' '){
array1[len--]='0';
array1[len--]='2';
array1[len--]='%';
}
else{
array1[len--]=array1[i];
}
}
return new String(array1,len+1,S.length()-1-(len+1)+1); //数组,起始,长度
}
}