美文网首页
有效的字母异位词(leetcode)

有效的字母异位词(leetcode)

作者: 9156523 | 来源:发表于2019-05-14 11:08 被阅读0次
/**
 * 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
 *
 * 示例 1:
 *
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 * 示例 2:
 *
 * 输入: s = "rat", t = "car"
 * 输出: false
 * 说明:
 * 你可以假设字符串只包含小写字母。
 *
 * 进阶:
 * 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
 */

方法1:

可以直接使用Hashmap,把第一个字符串保存到map中,第二个字符串判断是否都存在,key为字符串的每一个字符,value为出现的次数,时间复杂度为O(n*n)

      public boolean isAnagram(String s, String t) {

        if(s.length() != t.length()) return false;

        HashMap<Character,Integer> map = new HashMap<>();
        //把s对应的值存入map中,统计出现的次数
        for(int i = 0;i<s.length();++i){
            if(map.containsKey(s.charAt(i))){
                int value = map.get(s.charAt(i));
                map.put(s.charAt(i),++value);
            }

            else{
                map.put(s.charAt(i),1);
            }
        }
        //从map中获取key判断是否相等,然后次数减1
        for(int j = 0;j<t.length();++j){
            if (map.containsKey(t.charAt(j))){
                int value = map.get(t.charAt(j));
                if(value>0) map.put(t.charAt(j),--value);
                else return false;
            }else{
                return false;
            }
        }

        return true;
    }

方法2:

建立一个26长度的整型数组,获取第一个字符串的每一个字符减去‘a’,这样就可以计算出下标,然后value+1表示重复的个数,最后第二个字符串-1表示匹配的次数

    public boolean isAnagram2(String s,String t){
        if(s.length() != t.length()) return false;

        int has[] = new int[26];
        //记录了数目同时也知道了是哪一个,同时做对比 
        for(int i = 0;i<s.length();++i){
            has[s.charAt(i)-'a']++;
            has[t.charAt(i)-'a']--;
        }

        for (int ha : has) {
            if(ha !=0) return false;
        }


        return true;
    }

相关文章

网友评论

      本文标题:有效的字母异位词(leetcode)

      本文链接:https://www.haomeiwen.com/subject/ddojaqtx.html