美国华人网FuninUSA_唐人社区_北美华人论坛:找礼品卡,找折扣,找报价,找工作,找内推,找项目,找股票

 找回密码
 立即注册

点击进入授权页面

只需一步,快速开始

  • 周冬雨马思纯玩自黑 真是女演员中的两股清流
  • 韩女星宋智孝找到新东家 签约新兴经纪公司
  • 姚笛外出会友赴饭局 吞云吐雾烟不离手
  • 糗!邓超被错认彭于晏 假签名还写错字
  • 曝百度腾讯联合开发AI围棋软件:拼谷歌AlphaGo
  • 初二女孩压力大吃头发 把胃撑到四倍大
  • 人类突然集体都吃素了 世界、身体都会变怎样?
  • 日本网友偶遇乌鸦想为其拍照 下一秒懵圈了
  • 马戏团驯兽师现场调教猛狮:竟被发情狮子咬死
  • 日本男子展示一把6块5的刀走红:切纸削番茄砍矿泉水
  • 2017年初诺基亚的手机将使用Android系统
  • 俄罗斯宣布11 - 12月削减石油产量水平
Logo1-800-PetMeds Free Shipping $49Take $10 Off Your First Order w/code: SAVE10 - 234 x 60
ASICS AmericaPagoda Piercing Banner 234x60Sierra Trading Post
搜索
查看: 3018|回复: 4

内推面经 -问一个Anagram的参考程序- 唐人社区|北美华人论坛

[复制链接]
TA在交友中心
0 0 39
  @ME:   

17

主题

395

帖子

430

积分

中级会员

Rank: 3Rank: 3

积分
430
QQ
发表于 2016-9-21 19:12:58 | 显示全部楼层 |阅读模式
分享到:
{$content}

唐人社区-北美华人论坛-内推HP?mod=forumdisplay&fid=83&fromuid=1" target="_blank" class="relatedlink">面经版-问一个Anagram的参考程序


  JobHunting
标 题: 问一个Anagram的参考程序


Given an array of strings, return all groups of strings that are anagrams.

All inputs will be in lower-case

Given ["lint", "intl", "inlt", "code"], return ["lint", "inlt", "intl"].

Given ["ab", "ba", "cd", "dc", "e"], return ["ab", "ba", "cd", "dc"].

9章的参考程序如下, 他给每一个string换成26长度的int array. 然后用这个array生
成一个hash code. 问题是这个hashcode能够唯一对应一个anagram么. 不同的anagram
有没有对应同一个hashcode的可能 (考虑int overflow的情况下).

public class Solution {
private int getHash(int[] count) {
int hash = 0;
int a = 378551;
int b = 63689;
for (int num : count) {
hash = hash * a + num;
a = a * b;
}
return hash;
}

public ArrayList anagrams(String[] strs) {
ArrayList result = new ArrayList();
HashMap map = new HashMap();

for (String str : strs) {
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
count[str.charAt(i) - 'a']++;
}

int hash = getHash(count);
if (!map.containsKey(hash)) {
map.put(hash, new ArrayList());
}

map.get(hash).add(str);
}

for (ArrayList tmp : map.values()) {
if (tmp.size() > 1) {
result.addAll(tmp);
}
}

return result;
}
}
--

新浪微博官方账号】美国省钱快报FunInUSA : 每日滚动更新美国市场折扣资讯微商进货首选资讯渠道。
回复 百度谷歌雅虎搜狗搜搜有道360奇虎

举报

TA在交友中心
0 0 55
  @ME:   

23

主题

95

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2016-9-21 20:41:19 | 显示全部楼层
JobHunting
标  题: 问一个Anagram的参考程序


Given an array of strings, return all groups of strings that are anagrams.

All inputs will be in lower-case

Given [&quot;lint&quot;, &quot;intl&quot;, &quot;inlt&quot;, &quot;code&quot;], return [&quot;lint&quot;, &quot;inlt&quot;, &quot;intl&quot;].

Given [&quot;ab&quot;, &quot;ba&quot;, &quot;cd&quot;, &quot;dc&quot;, &quot;e&quot;], return [&quot;ab&quot;, &quot;ba&quot;, &quot;cd&quot;, &quot;dc&quot;].

9章的参考程序如下, 他给每一个string换成26长度的int array. 然后用这个array生
成一个hash code. 问题是这个hashcode能够唯一对应一个anagram么. 不同的anagram
有没有对应同一个hashcode的可能 (考虑int overflow的情况下).

public class Solution {
    private int getHash(int[] count) {
        int hash = 0;
        int a = 378551;
        int b = 63689;
        for (int num : count) {
            hash = hash * a + num;
            a = a * b;
        }
        return hash;
    }
   
    public ArrayList<String> anagrams(String[] strs) {
        ArrayList<String> result = new ArrayList<String>();
        HashMap<Integer, ArrayList<String>> map = new HashMap<Integer,
ArrayList<String>>();

        for (String str : strs) {
            int[] count = new int[26];
            for (int i = 0; i < str.length(); i++) {
                count[str.charAt(i) - 'a']++;
            }

            int hash = getHash(count);
            if (!map.containsKey(hash)) {
                map.put(hash, new ArrayList<String>());
            }

            map.get(hash).add(str);
        }

        for (ArrayList<String> tmp : map.values()) {
            if (tmp.size() > 1) {
                result.addAll(tmp);
            }
        }

        return result;
    }
}
--
TA在交友中心
0 0 54
  @ME:   

26

主题

86

帖子

139

积分

注册会员

Rank: 2

积分
139
QQ
发表于 2016-9-21 21:11:20 | 显示全部楼层
JobHunting
标  题: Re: 问一个Anagram的参考程序


代码看着有点奇怪,既然已经设置了int[] count, 每次将str的每一个字母放进去之后
,然后从0到26依次搜集这些字母,遍组成了一个hash code,这样互为anagram的两个
字符串将拥有相同的hash code. 上面求解hash的 a *= b 存在溢出的风险。
--
TA在交友中心
0 0 46
  @ME:   

22

主题

74

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
发表于 2016-9-21 21:15:03 | 显示全部楼层
JobHunting
标  题: Re: 问一个Anagram的参考程序


我也觉得 理论上是不能保证的溢出了还能保证unique.
一个26长度的int数组有INT_MAX^26种组合方式
远远超出int的范围.

就算每个int的范围是0~2 3^26也超出int的范围了.

我发现他们家贴的好多答案都简单粗暴的不负责任啊.

【 在 Yanjun (yanjun) 的大作中提到: 】
: 代码看着有点奇怪,既然已经设置了int[] count, 每次将str的每一个字母放进去之后
: ,然后从0到26依次搜集这些字母,遍组成了一个hash code,这样互为anagram的两个
: 字符串将拥有相同的hash code. 上面求解hash的 a *= b 存在溢出的风险。



--
TA在交友中心
0 0 1024
  @ME:   

15

主题

1034

帖子

2058

积分

金牌会员

Rank: 6Rank: 6

积分
2058
QQ
发表于 2016-10-5 11:41:56 | 显示全部楼层
啊啊啊啊啊啊啊啊啊啊啊
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

玩美生活FunInUSA.net 华人娱乐论坛发布的内推面经 -问一个Anagram的参考程序- 唐人社区|北美华人论坛帖子由网友提供或转载于网络,若发布的内推面经 -问一个Anagram的参考程序- 唐人社区|北美华人论坛侵犯了您的权益,请联系我们.
1&1 Hosting

Copyright ©2011 FunInUSA.com All Right Reserved.  Powered by Discuz! X3.0 小黑屋

本站信息均由会员发表,不代表美国华人网FunInUSA立场,如侵犯了您的权利请发帖投诉  技术支持: 美国华人网FunInUSA

安全联盟认证 安全联盟认证

快速回复 返回顶部 返回列表