标签:pre ble 标准 toc else problems ISE http 移位
s = "abcd123" k = 3
Return "123abcd"
先分别将“abcd”和“123”翻转,再将整个字符串翻转,即可得到结果。
s = "I am a student"
Return "student a am I"
先分别将每个单词翻转,最后将整个句子进行翻转即得到结果
LeetCode:有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true
1.使用26位计数器
因为本题仅限于小写英文字母,所以使用26位数组来进行标记即可
2.map.getOrDefault(ch, 0)
若不存在则返回0。使用这个函数可稍微优化代码,不会太臃肿。
3.遍历String的优化写法
//方法一
for(int i=0;i<s.length();++i){
char c = s.charAt(i);
}
//方法二
for(char ch : s.toCharArray()){
}
方法二比方法一性能好不少
我自己的蠢方法,使用hashmap但是特别不优雅
class Solution {
public boolean isAnagram(String s, String t) {
HashMap<Character,Integer> map = new HashMap<>();
Integer v;
for(int i=0;i<s.length();++i){
char c = s.charAt(i);
if((v = map.get(c))!=null){
map.put(c,v+1);
}else{
map.put(c,1);
}
}
for(int i=0;i<t.length();++i){
char c = t.charAt(i);
if((v = map.get(c))!=null){
if(v==1)
map.remove(c);
else
map.put(c,v-1);
}else{
return false;
}
}
return map.isEmpty();
}
}
更加优化的hashmap写法:
public boolean isAnagram_2(String s, String t) {
Map<Character, Integer> map = new HashMap<>();
for (char ch : s.toCharArray()) {
map.put(ch, map.getOrDefault(ch, 0) + 1);
}
for (char ch : t.toCharArray()) {
Integer count = map.get(ch);
if (count == null) {
return false;
} else if (count > 1) {
map.put(ch, count - 1);
} else {
map.remove(ch);
}
}
return map.isEmpty();
}
本题的标准做法:
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
for(char c:s.toCharArray()){
arr[c-‘a‘] +=1;
}
for(char c:t.toCharArray()){
arr[c-‘a‘] -=1;
}
for(int item : arr){
if(item!=0) return false;
}
return true;
}
}
标签:pre ble 标准 toc else problems ISE http 移位
原文地址:https://www.cnblogs.com/buptleida/p/12991090.html