《算法零基础100讲》(第24讲) 字符串算法(四) - 字符计数法

  1. 数组中第 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_52230126/article/details/121523131