判断两个字符串s1 s2所含字符是否相同

题目摘自CareerCup-Top 150 Questions 4th

描述如下:

Write a method to decide if two strings are anagrams or not

 

解答如下:

分析:两个字符串是否相同,解法1就是把这两个字符串一排序,然后看是否==

解法2是分析两个字符串都含有多少个不同的字符,每个不同的字符含有几个,比如说字符串"abcdefab"含有6个不同字符,分别是a b c d e f,其中各个字符的个数分别是2 2 1 1 1 1 ,那么解法2就可以比较两个字符串这个个数是否相等。代码如下

说明:

letters数组里面存放各个字符的个数

num_unique_chars 里存放字符串有多少个不同的char字符

num_completed是存放两个字符串s1 s2已经完成比对的字符个数

 1 public static boolean anagram(String s, String t) {
 2     if (s.length() != t.length()) { return false; }
 3     int[] letters = new int[256];
 4     int num_unique_chars = 0;
 5     int num_completed = 0;
 6     char[] s_array = s.toCharArray();
 7     for (char c : s_array) {
 8         if (letters[c] == 0) { ++num_unique_chars; }
 9         ++letters[c];
10     }
11     for (int i = 0; i < t.length(); ++i) {
12         int c = (int) t.charAt(i);
13         if (letters[c] == 0) { return false; }
14         --letters[c];
15         if (letters[c] == 0) {
16             ++num_completed_t;
17             if (num_completed_t == num_completed_t) {
18                 return i == t.length();
19             }
20         }
21     }
22     return false;
23 }

 

posted @ 2012-09-27 22:36  ziyoudefeng  阅读(3262)  评论(0编辑  收藏  举报