Anagrams
Mar 19 '12
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sz = strs.size();
vector<string> res;
if(sz<2) return res;
unordered_map<string, vector<string> > Map;
for(int i=0; i<sz; i++) {
string s = strs[i];
sort(s.rbegin(), s.rend(), greater<char>());\\for fun
Map[s].push_back(strs[i]); \\alert. different form java. no need to create a vector.
}
unordered_map<string, vector<string> >::iterator it = Map.begin();
for(; it!= Map.end(); it++) {
vector<string> & v = (*it).second; \\standard way to iterate map.
if( v.size()>=2) {
res.insert(res.end(), v.begin(), v.end());
}
}
return res;
}
};
public class Solution {
public ArrayList<String> anagrams(String[] strs) {
// Start typing your Java solution below
// DO NOT write main() function
Map<String, LinkedList<String>> map = new HashMap<String, LinkedList<String>>();
ArrayList<String> rel = new ArrayList<String>();
for( int i=0; i<strs.length; i++) {
char[] c = strs[i].toCharArray();
Arrays.sort(c);
String s = new String(c); //!!!!alert!!! super important. != t.toString(){ [C@6e1408 }
if( map.containsKey(s) ) {
map.get(s).add( strs[i]); // add() will return false or true;
} else {
LinkedList<String> ll = new LinkedList<String>();
ll.add( strs[i] );
map.put(s, ll);
}
}
for(LinkedList<String> ll : map.values() ) {
if( ll.size() > 1) {
rel.addAll( ll );
}
}
return rel;
}
}
public class Solution {
public ArrayList<String> anagrams(String[] strs) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList<String> rel = new ArrayList<String>();
if( strs.length <=1) return rel;
Map<String, ArrayList<String> > ana = new HashMap<String, ArrayList<String> >();
int sz = strs.length;
for(int i=0; i<sz; i++) {
char[] ch = strs[i].toCharArray();
Arrays.sort(ch);
String key = new String( ch );
if( ana.containsKey(key) ) {
ana.get(key).add( strs[i] );
} else {
ArrayList<String> temp = new ArrayList<String>();
temp.add( strs[i] );
ana.put(key, temp);
}
}
for(String str : ana.keySet() ) {
if( ana.get(str).size() >1){
rel.addAll( ana.get(str) );
}
}
return rel;
}
}