有效的字母异位词

传送门:有效的字母异位词

题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词

示例I/O

示例 1:
输入: s = "anagram", t = "nagaram"
输出: true




示例 2:
输入: s = "rat", t = "car"
输出: false


说明:
你可以假设字符串只包含小写字母。




进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

(排序)

由于字母异位词中所有字母都是相同的,只是排列的次序不同,
所以我们考虑将字符串转换为
char数组后,将其排序,然后比较即可

Code

class Solution {
     
    public boolean isAnagram(String s, String t) {
     
        if(s.length() != t.length()){
     
            return false;
        }
        char[] chs1 = s.toCharArray();
        char[] chs2 = t.toCharArray();
        quickSort(chs1,0,chs1.length-1);
        quickSort(chs2,0,chs1.length-1);
        for(int i = 0;i<chs1.length;i++){
     
            if(chs1[i] != chs2[i]){
     
                return false;
            }
        }
        return true;
    }
    private static void quickSort(char chs[],int low,int high){
     
        if(low >= high){
     
            return;
        }
        int left = low;
        int right = high;
        char pivot = chs[low];
        while (left < right) {
     
            while(left < right&&chs[right] >= pivot){
     
                right--;
            }
            chs[left] = chs[right];
            while(left < right&&chs[left] <= pivot){
     
                left++;
            }
            chs[right] = chs[left];
        }
        chs[left] = pivot;
        quickSort(chs,low,left - 1);
        quickSort(chs,left + 1,high);
    }
}

也可以Java API中已经封装好了的Arrays,sort方法和equals方法加快速度

Code

class Solution {
     
    public boolean isAnagram(String s, String t) {
     
        if(s.length() != t.length()){
     
            return false;
        }
        char[] chs1 = s.toCharArray();
        char[] chs2 = t.toCharArray();
        Arrays.sort(chs1);
        Arrays.sort(chs2);
        return Arrays.equals(chs1,chs2);
    }
}

或者可以用lambda表达式

Code

class Solution {
     
    public boolean isAnagram(String s, String t) {
     
        return Arrays.equals(s.chars().sorted().toArray(), t.chars().sorted().toArray());
    }
}

Code

class Solution {
     
    public boolean isAnagram(String s, String t) {
     
        int[] counts = new int[26];
        t.chars().forEach(tc -> counts[tc - 'a']++);
        s.chars().forEach(cs -> counts[cs - 'a']--);
        return Arrays.stream(counts).allMatch(c -> c == 0);
    }
}

Code

class Solution {
     
    public boolean isAnagram(String s, String t) {
     
        int[] sCounts = new int[26];
        int[] tCounts = new int[26];
        for (char ch : s.toCharArray()) {
     
            sCounts[ch - 'a']++;
        }
        for (char ch : t.toCharArray()) {
     
            tCounts[ch - 'a']++;
        }
        for (int i = 0; i < 26; i++) {
     
            if (sCounts[i] != tCounts[i]) {
     
                return false;
            }
        }
        return true;
    }
}

你可能感兴趣的:(javase,算法,字符串,leetcode,快速排序,哈希表)