leetcode--Valid Anagram

来源:互联网 发布:程序员联合开发网站 编辑:程序博客网 时间:2024/06/05 03:38

题目: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.

分析:两个字母组成的顺序和数目相同。求是否为乱序字母。

One:利用map分别存储并统计两个字符串的<字母,数量>,最后比较两个Map,注意Map的比较。

public class Solution {    public boolean isAnagram(String s, String t) {        if(s==null||t==null||s.length()!=t.length())return false;        Map<Character,Integer> maps = new HashMap<Character,Integer>();        Map<Character,Integer> mapt = new HashMap<Character,Integer>();        for(int i=0;i<s.length();i++){            if(maps.containsKey(s.charAt(i))){                maps.put(s.charAt(i),maps.get(s.charAt(i))+1);            }else{ maps.put(s.charAt(i),1);}            if(mapt.containsKey(t.charAt(i))){                 mapt.put(t.charAt(i),mapt.get(t.charAt(i))+1);            }else{mapt.put(t.charAt(i),1);}        }        for(Character key : maps.keySet()){            if(!mapt.containsKey(key)||!maps.get(key).equals(mapt.get(key)))return false;        }        return true;    }}

Two:利用一个长为26的数组,用0-26个小写字母位置++记录s字符串,--记录t字符串,最后看数组的每个位置是否为0来判断。

public class Solution {    public boolean isAnagram(String s, String t) {          if(s.equals(t))            return true;       if(s==null||t==null||s.length()!=t.length())            return false;        int[] num=new int[26];        for(int i=0;i<s.length();i++){            num[s.charAt(i)-'a']++;            num[t.charAt(i)-'a']--;        }        for(int i:num ){            if(i!=0)                return false;        }        return true;    }}


0 0
原创粉丝点击