- 数组中第 K 个独一无二的字符串
/**
1.独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。
2.给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独一无二的字符串 。如果 少于 k 个独一无二的字符串,那么返回 空字符串 "" 。
3.注意,按照字符串在原数组中的 顺序 找到第 k 个独一无二字符串。
*/
class Solution {
public String kthDistinct(String[] arr, int k) {
Map <String ,Integer> map = new HashMap<>();
for(String s : arr){
map.put(s,map.getOrDefault(s, 0) + 1);
}
for(String s :arr){
if(map.get(s) == 1){
k--;
}
if(k == 0){
return s;
}
}
return "";
}
}
2.剑指 Offer II 032. 有效的变位词
/**
1.给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。
2.注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)*/
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
if(s.equals(t)){
return false;
}
int [] arr1 = new int [26];
int [] arr2 = new int [26];
for(int i = 0; i < s.length(); i++){
arr1[s.charAt(i) - 'a']++;
}
for(int i = 0; i < s.length(); i++){
arr2[t.charAt(i) - 'a']++;
}
if(Arrays.equals(arr1,arr2)){
return true;
}
return false;
}
}
3.面试题 01.02. 判定是否互为字符重排
/**给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 */
class Solution {
public boolean CheckPermutation(String s1, String s2) {
int count1 = 0, count2 = 0;
if(s1.length() != s2.length()){
return false;
}
char [] arr1 = s1.toCharArray();
char [] arr2 = s2.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
for(int i = 0; i < arr1.length; i ++){
if(arr1[i] != arr2[i]){
return false;
}
}
return true;
}
}
4.面试题 01.01. 判定字符是否唯一
/**实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 */
class Solution {
public boolean isUnique(String astr) {
HashSet<Character> set = new HashSet<>();
for(char c : astr.toCharArray()){
if(!set.add(c)){
return false;
}
}
return true;
}
}