BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #1861同步于 2017/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

【问题】360春招试题 偶串

jy11152721
2017/3/26镜像同步19 回复
题目链接:http://discuss.acmcoder.com/topic/58d66c635ad79cff4d696b5d 第二题,偶串问题,赛码网已经给出了c++版的解答,使用了map,JavaScript里可以使用array实现字典操作,我就写了一版,但这样最大下标只能是32位,无法满足题目要求,通过率只有40%。。有没有哪位大神能写出一版js的?? 我写的如下: ```JavaScript var str=read_line(); len=str.length; var dic=new Array(); for(i=0;i<=100000;i++){ dic[i]=0; } dic[0]=1; var cur=0; var ans=0; for(var i=0;i<len;i++){ var x=str[i].charCodeAt()-'a'.charCodeAt(); cur ^= (1<<x); ans+=dic[cur]; dic[cur]++; } print(ans); ``` 当出现字符'p'以后的字符时结果就是NAN。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
fanatical机器人#1 · 2017/3/26
bd
Marcovaldo机器人#2 · 2017/3/26
借楼求debug,我用Python写的通过率为70%,然后翻译成js,卡在了'abbc'上,但是本地运行结果是正确的啊,求大神给debug一下。 ```python def OuChuan(subStr): d = dict() for i in range(0, len(subStr)): if subStr[i] in d: d[subStr[i]] += 1 else: d[subStr[i]] = 1 num = 0 for a in d: num += d[a]%2 if num == 0: return True else: return False def Count(aStr): answer = 0 length = len(aStr) if length == 2 and aStr[0] == aStr[1]: return 1 for i in range(2, length+1): if i % 2 == 0: for index in range(0, length-i+1): if OuChuan(aStr[index:index+i]): answer += 1 else: continue return answer #!/usr/bin/env python # coding=utf-8 # Python使用的是2.7,缩进可以使用tab、4个空格或2个空格,但是只能任选其中一种,不能多种混用 while 1: a=[] s = raw_input() # raw_input()里面不要有任何提示信息 if s != "": print Count(s) else: break ``` ```JavaScript '--use-strict' //JavaScript function EvenSubStr(subStr){ var m = {}; for(var i=0;i<subStr.length;i++){ if(subStr[i] in m) m[subStr[i]] += 1; else m[subStr[i]] = 1; } var num = 0; for(var key in m) //console.log(m[key]); num += m[key]%2; //console.log(num); if(num===0) return 1; else return 0; } function Count(aStr){ var answer = 0; var len = aStr.length; if(len===2 && aStr[0] === aStr[1]) return 1; for(var i = 2;i<=len;i++){ if (i % 2 === 0) for(var index=0;index<=len-i;index++){ if(EvenSubStr(aStr.substring(index, index+i)) === 1) answer = answer + 1; } } return answer; } var line; while(line = read_line()){ line = line.split(' '); print(Count(line)); } ```
logsin机器人#3 · 2017/3/26
你只是把代码翻译了一遍啊
jy11152721机器人#4 · 2017/3/26
是的。。。 【 在 logsin (github/shangfeiSF) 的大作中提到: 】 : 你只是把代码翻译了一遍啊 通过『我邮2.0』发布
logsin机器人#5 · 2017/3/26
Count里内层的for循环不对吧,index=i开始吧,还有read_line是什么?,line就是个字符串么 【 在 Marcovaldo 的大作中提到: 】 : 借楼求debug,我用Python写的通过率为70%,然后翻译成js,卡在了'abbc'上,但是本地运行结果是正确的啊,求大神给debug一下。 : : ```python
FatBird机器人#6 · 2017/3/26
read_line是平台给定的一个获取一行输入的函数 【 在 logsin (github/shangfeiSF) 的大作中提到: 】 : Count里内层的for循环不对吧,index=i开始吧,还有read_line是什么?,line就是个字符串么
Marcovaldo机器人#7 · 2017/3/26
【 在 logsin 的大作中提到: 】 : Count里内层的for循环不对吧,index=i开始吧,还有read_line是什么?,line就是个字符串么 没错,第一层循环中的i是子串的长度(计只算i为偶数的情况,奇数是必定不是偶串),第二层循环中的index是子串在串中的起始位置,取值应该是(0,aStr.length-i+1)(取不到aStr.length-i+1)。
logsin机器人#8 · 2017/3/26
通过率是怎么给出的?
Nroskill机器人#9 · 2017/3/26
把key改成string,比如0变成'0',用到的时候再转成int,不然的话就直接用长度为26的string当作key