面试题--在字符串内找到所有不重复的字符。

xuhaijin 2011-09-20 03:47:38
面试题:在字符串内找到所有不重复的字符,如”BWABSDWD”中找出”S”和”A”.考虑时间和空间复杂度。(请用C# 或 Javascript 实现)

我解答的:

String.prototype.repeatOpt = function () {
var str = this + "",objStr = "";
for (var i = 0; i < this.length; i++) {
var s = str[i];
var newStr = str.replace(s, '');
var j = newStr.indexOf(s);
if (j == -1) {
objStr += s;
}
}
return objStr;
}
alert("BWABSDWD".repeatOpt());


虽然我这能实现,但觉得不是怎么好,大家有什么好方法。。尤其是说明考虑时间和空间复杂度。
...全文
313 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dz0381 2011-09-21
  • 打赏
  • 举报
回复
A-Z的ascii码减去65
对应的是的数值范围一定是0-25

所以我用的是空间换时间的方法
时间复杂度O(3n)
xuhaijin 2011-09-20
  • 打赏
  • 举报
回复
var arrWord = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);


这啥意思。。这么多0。我把0去了就不行。
dz0381 2011-09-20
  • 打赏
  • 举报
回复

String.prototype.repeatOpt = function () {
var thisString = this;
var newString = "";
var arrWord = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
for (var i = 0; i < this.length; i++) {
arrWord[thisString[i].charCodeAt() - 65]++;
}
for (var i = 0; i < arrWord.length; i++) {
if (arrWord[i] == 1) {
newString += String.fromCharCode(i + 65);
}
}

return newString;
}

alert("BWABSDWD".repeatOpt());

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧