[LeedCode]242. Valid Anagram

Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.

Note:
You may assume the string contains only lowercase alphabets.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?



网上找到的最简单的解决方法如下:

public class Solution {

    public boolean isAnagram(String s, String t) {

        char[] sArr = s.toCharArray();  
        char[] tArr = t.toCharArray();  
          
        Arrays.sort(sArr);  
        Arrays.sort(tArr);  
          
        return String.valueOf(sArr).equals(String.valueOf(tArr));  
    }

}


自己想到的方法为使用两个Map,对比每一个key的value值,但这种方法在一个特定的50000字符组成的字符串的对比时出现错误,正在寻找原因。

代码如下:

package test;


import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;


public class Solution {

public static void main(String []args){

String s1 = "";

String s2 = "";

System.out.println(isAnagram(s1,s2));

}

   

public static boolean isAnagram(String s, String t) {

Map<Character,Integer> hm = new HashMap<Character,Integer>();

Map<Character,Integer> hm1 = new HashMap<Character,Integer>();

if(s.length()!=t.length())

        return false;

        for(int i = 0;i < t.length();i++){

        if(!hm.containsKey(s.charAt(i))){

        hm.put(s.charAt(i), 1);

        }

        else {

        hm.put(s.charAt(i), hm.get(s.charAt(i))+1);

        }

        if(!hm1.containsKey(t.charAt(i))){

        hm1.put(t.charAt(i), 1);

        }

        else{

        hm1.put(t.charAt(i), hm1.get(t.charAt(i))+1);

        }

        }

        if(hm.size()!=hm1.size())

        return false;

       

        for(char c:hm.keySet()){

        if(!hm1.containsKey(c))

        return false;

        else if(hm1.get(c)!=hm.get(c))

        return false;

        }

return true;

    }

}


网上还找到一种类似的方法,是将s1字符串分析后放在map中,再遍历s2,遇到相同字符时,将map中对应的值-1,最后结果每一个字符对应的值都为0时,输出两个字符串由相同字符串组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值