Valid Anagram(easy)

来源:互联网 发布:跨三层取mac 编辑:程序博客网 时间:2024/05/22 02:05

【题目】

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

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

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

【题意】

        判断s,t两个字符串里所含的每一种字母个数是否一样,一样,则返回true,不一样则返回false即字符串t是不是字符串s打乱字符顺序后得到的一个字符串

【分析】

         第一种是对两个字符串进行排序看看是否相等或者使用哈希表做字符统计用到hash表的思想,也就是说把每个字符直接hash,申请一个26的字符数组就行,然后初始化为0,第一遍遍历s,如果有一个字符就加1,第二次遍历t,如果有一个字符就相应减1,最后遍历这个256数组,如果有非0的项,返回false,否则返回true

【实现】

 排序方法:

public class Solution {    public boolean isAnagram(String s, String t) {        char[] word1 = s.toCharArray();        char[] word2 = t.toCharArray();        Arrays.sort(word1);        Arrays.sort(word2);        return String.valueOf(word1).equals(String.valueOf(word2));    }}
hash统计方法:

public class Solution {    public boolean isAnagram(String s, String t) {         int[] table = new int[26];         if(s.length()!=t.length()) return false;        // 记录字母在第一个单词中出现的次数        for(int i = 0; i < s.length(); i++){            table[s.charAt(i)-'a']++;            table[t.charAt(i)-'a']--;        }        // // 减去字母在第二个单词中出现的次数        // for(int i = 0; i < t.length(); i++){        //     table[t.charAt(i)-'a']--;        // }        // 如果某个计数器不为0,则返回假        for(int i = 0; i < 26; i++){            if(table[i]!=0) return false;        }        return true;    }}


public class Solution {    public boolean isAnagram(String s, String t) {        int[] table = new int[26];        // 记录字母在第一个单词中出现的次数        for(int i = 0; i < s.length(); i++){            table[s.charAt(i)-'a']++;        }        // 减去字母在第二个单词中出现的次数        for(int i = 0; i < t.length(); i++){            table[t.charAt(i)-'a']--;        }        // 如果某个计数器不为0,则返回假        for(int i = 0; i < 26; i++){            if(table[i]!=0) return false;        }        return true;    }}



0 0
原创粉丝点击