g*j
2 楼
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
上面大小测试集都过了,但是总感觉有问题,至少感觉很臃肿,请问我写的这个代码哪
可以改进一下?
int getHashcode(string s) {
int code = 2166136261U;
sort(s.begin(), s.end());
for(int i = 0 ; i < s.length(); i++) {
code = code ^ (s[i]);
code = code * 16777619;
}
return code;
}
class Solution {
public:
vector anagrams(vector &strs) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector results;
if(strs.size() <= 1) return results;
map myMap;
map myCode;
for(int i = 0; i < strs.size(); i++) {
myCode[strs[i]] = getHashcode(strs[i]);
}
for(int i = 0; i < strs.size(); i++) {
myMap[myCode[strs[i]]] = 0;
}
for(int i = 0; i < strs.size(); i++) {
myMap[myCode[strs[i]]]++;
}
for(int i = 0; i < strs.size(); i++) {
if(myMap[myCode[strs[i]]] > 1 ) {
results.push_back(strs[i]);
}
}
return results;
}
};
Note: All inputs will be in lower-case.
上面大小测试集都过了,但是总感觉有问题,至少感觉很臃肿,请问我写的这个代码哪
可以改进一下?
int getHashcode(string s) {
int code = 2166136261U;
sort(s.begin(), s.end());
for(int i = 0 ; i < s.length(); i++) {
code = code ^ (s[i]);
code = code * 16777619;
}
return code;
}
class Solution {
public:
vector
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector
if(strs.size() <= 1) return results;
map
map
for(int i = 0; i < strs.size(); i++) {
myCode[strs[i]] = getHashcode(strs[i]);
}
for(int i = 0; i < strs.size(); i++) {
myMap[myCode[strs[i]]] = 0;
}
for(int i = 0; i < strs.size(); i++) {
myMap[myCode[strs[i]]]++;
}
for(int i = 0; i < strs.size(); i++) {
if(myMap[myCode[strs[i]]] > 1 ) {
results.push_back(strs[i]);
}
}
return results;
}
};
r*s
4 楼
code = code ^ (s[i]);
code = code * 16777619;
=>
code ^= s[i];
code *= 16777619;
能省几个字符……
code = code * 16777619;
=>
code ^= s[i];
code *= 16777619;
能省几个字符……
i*4
7 楼
paid half gc, half cc, the cs refunded all back to cc, sweet~~
r*h
8 楼
用一个multimap
左边是一个string,右边是对应的字符串的index
因为所有anagram,他们sort后的字符串都是一样的。
第一轮loop,sort每个string,按照sort的结果加入到multimap里
第二轮遍历multimap,输出字符串
multimap mmp;
multimap::iterator it;
vector results;
string tmp;
for(int i=0; i tmp = strs[i];
sort(tmp.begin(), tmp.end());
mmp.insert(std::pair(tmp, i));
}
for(it=mmp.begin(); it!=mmp.end(); it++){
results.push_back(strs[(*it).second]);
}
return results;
左边是一个string,右边是对应的字符串的index
因为所有anagram,他们sort后的字符串都是一样的。
第一轮loop,sort每个string,按照sort的结果加入到multimap里
第二轮遍历multimap,输出字符串
multimap
multimap
vector
string tmp;
for(int i=0; i
sort(tmp.begin(), tmp.end());
mmp.insert(std::pair
}
for(it=mmp.begin(); it!=mmp.end(); it++){
results.push_back(strs[(*it).second]);
}
return results;
相关阅读
square第一天45%收盘吐槽一个z 家onsite 的安排啥时候辞职比较好点?某打车公司用java面可以吗?链表题一问groupon这破网站还不死呢?CV上能skip掉一段工作经历吗?为啥弯曲那么多缠头?该去walmart ecommerce做senior SDET还是在小公司转成backend engineer?发现linkedin上面post的工作机会有需要Facebook内推的吗?紧急求助,offer因为不能e verify被收回怎么办?U/A/P选择。特别请赵策,京二,axa什么什么,play96等大牛进You are calibrated against candidate pool大浪淘沙, 签别山寨版垃圾培训班的12条法则内推的帖子怎么越来越少了?Uber是不是比A/P/S更靠谱有没有experienced QA 同学对Apple感兴趣小本进来报一个G的offer替朋友报个A的Offer