标签:
public class Solution { /** * @param s: The first string * @param b: The second string * @return true or false */ public boolean anagram(String s, String t) { // write your code here int lens = s.length(); int lent = t.length(); if (lens != lent){ return false; } else { int[] base = new int[256]; for (char c : s.toCharArray()){ base[c]++; } for (char c : t.toCharArray()){ base[c]--; if (base[c] < 0){ return false; } } return true; } } };
这道题很简单但很巧妙,不能直接用hash table的原因是一个string可能是abbc,另一个是aabc,虽然字母一样,但是字母出现的顺序不一样。而这种方法是用ASCII Table先创建一个长度为256的int array,然后用第一个string的每一个char做标准,把每个字母出现的个数存在array里。第二个string把出现的字母个数从第个array里剪掉。只要有小于0的,就说明字母一定不完全一样。不需要考虑大于0的情况是因为两个string长度相等,只要有大于0的,就说明第一个string有一个字母出现的次数比第二个多,第二个必然有另一个字母出现的次数比第一个多。这样长度才能相等。
小问题:
string变char array -> .toCharArray();
int array initialization -> int[] intArray = new int[256]
标签:
原文地址:http://www.cnblogs.com/codingEskimo/p/5009886.html