今天博彦面试的一道题

面试官问到:给定一个字符串,请处理成一个没有重复字符的字符串

 

当时想到的是一个简单但性能普通的方法,这个方法普通人都能想得到

 

吃完饭后我回到寝室,分析不能每次判断有没有重复都去遍历已遍历过的每个字符

 

为此,想到了数组的直接存取性质,于是豁然开朗:

 

算法差不多是这样的:

假设char str[]="bavdfegsgah$ #@";

那么先建立一个字典映射函数//其实相当于创建了索引

int indexStr(char c)

{

if(c=='a') return 0;

else if(c=='b') return 1;

...

else return -1;

}

//main

int[] s1=new int[indexStrCount];//indexStrCount为字典中字符的个数

int[] s2=new int[indexStrCount];

int i,j;

for (i=0;i<strLength;i++)//strLength为str中字符的个数

{

s1[i]=0;

}

for (i=0,j=0;i<strLength;i++)

{

    if(s1[indexStr(str[i])]==0)//判断该字符是否重复(存在时s1[i]=1)过

   {

   s1[i]=1;

   s2[j++]=str[i];

   if(j>=indexStrCount)break;

   }

}

//最后s2就是不重复的字符串,当然还可以考虑得更全面,上面的算法时间复杂度是T(n);

//一般人的第一次想法是判断当前字符有没有在已遍历的数组里面(此时要遍历该数组),这样时间复杂度就增大为T(n^2);

 

昨晚睡觉前又想了下,indexStr()函数似乎也类似遍历,看来得使用ASCII表和汉字编码表,将字符和整数进行映射,比如字符'a'对应65,这样可以直接从字符找到数组下标,就可以用到数组的直接存取功能了

时间: 2024-11-02 21:51:46

今天博彦面试的一道题的相关文章

对C语言中sizeof细节的三点分析介绍

以下是对C语言中sizeof的细节进行了详细的分析介绍,需要的朋友可以参考下   1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行.那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试的一道题,小编理解: 复制代码 代码如下: #include<iostream> using namespace std; int main() {     int i=1;     cout<<i<<endl;     sizeof(

我是如何从会计转行到数据分析

本文不推荐什么大社群!不推荐课程!只是简明地描述一下我是如何转行到数据分析岗的. 先说说自身情况吧: 16年本科毕业,专业财务管理 .在家乡,一个二线城市,做会计做了一年多(包括实习期).这一年多,把我从一个会计粉转变成一个会计黑,期间的辛酸在我某个回答里有写上一些.有转行的念头是16年7月,当时就是刷刷知乎,百度一下,了解了数据分析岗的状况,16年10月正式开始准备.后来不满意准备的进度,2017年3月提出离职申请,待业在家学习,直至8月份在广州才拿到稍微满意的offer.薪资确实翻了个倍还有

对C语言中sizeof细节的三点分析介绍_C 语言

1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行.那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试的一道题,小编理解: 复制代码 代码如下: #include<iostream> using namespace std; int main() {     int i=1;     cout<<i<<endl;     sizeof(++i);     cout<<i<<endl;    

巨资修建防护网难阻昆山富士康坠楼悲剧

宋冰 孙文祥 站在昆山富士康吴淞江厂区(下称"昆山富士康")的围墙外往里看,首先让人联想到的是,这像一座大学.巨大的白色工厂区与通常的教学楼相似,墙体略带红色的员工宿舍楼成片排列,其中还夹杂着食堂和活动中心,与大学里的学生宿舍区并无二致. 实际上,昆山富士康是这座城市最大的外资企业之一,厂区共有员工50000多人,占地2500多亩.它还有另外一个"第一"的称号--全球个人计算器连接器第一大厂商. 和世界上所有大学都不同的是,这里的员工宿舍楼每一层阳台外都装满了防止员

一些关于asp 购物车的想法_应用技巧

问题: 1.购物车中的数据是否应该存储在数据库中? 我特别想知道在真正的项目中,那些真正的软件工程师是如何考虑这个问题的.在Google上一搜,搜到了一篇咱园子里一位网友的观点:购物车应该是个临时存储数据的模块,他将其存放在Session对象中.这位网友说的很有道理,不过我并不喜欢这样的做法.如果大家都将其存储在Session对象中,成千上万个用户一同购物的话,想必ASP.NET服务器必将承受巨大的负载.也许像我们国内的网站可能会好一些,但想Amazon这样的网站,怎么做的呢?Amazon中国网

一些关于asp 购物车的想法

问题: 1.购物车中的数据是否应该存储在数据库中? 我特别想知道在真正的项目中,那些真正的软件工程师是如何考虑这个问题的.在Google上一搜,搜到了一篇咱园子里一位网友的观点:购物车应该是个临时存储数据的模块,他将其存放在Session对象中.这位网友说的很有道理,不过我并不喜欢这样的做法.如果大家都将其存储在Session对象中,成千上万个用户一同购物的话,想必ASP.NET服务器必将承受巨大的负载.也许像我们国内的网站可能会好一些,但想Amazon这样的网站,怎么做的呢?Amazon中国网

必读推荐- 90%的面试者都不知道这道题的答案

亲爱的DBA同胞们,你们是否记得在你找工作时,印象最深刻的面试题呢?那些看似简单的题目,实则蕴藏很大的玄机.今天我们通过一道经典的 ORacle DBA面试题目,去发现我们在面试中,到底还缺少那些能力? 这道题看起来很简单,然而,90%的面试者都不知道答案... 面试题描述: 对于一个NUMBER(1)的列,查询中的WHERE条件如果分别是大于3和大于等于4,二者是否等价. 乍一看,这个问题并不难.请读者朋友们在继续读下文之前,用30秒的时间思考. 接下来我们通过杨长老的博客,来说明面试者在这道

问两道题,我面试的时候问我的.

问题描述 一个平面划10条线,最多可以分成多少个块?一个酒瓶用一个橡皮塞塞住,不能把瓶子打碎,不能把橡皮塞打开,也不能在橡皮塞上撰孔,怎样把瓶内的就弄干??------------------------------------------------------------------------------------------------------------就这两个,不用程序写的,谁知道答案啊??告诉我一下,我很笨的. 解决方案 解决方案二:1.5条线平行和5条线平行相交16块吧2.

Nginx面试中最常见的18道题 抱佛脚必备

Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯.淘宝.百度.京东.新浪.网易等等.Nginx是网页服务器运维人员必备技能之一,下面为大家整理了一些比较常见的Nginx相关面试题,仅供参考: 1.请解释一下什么是Nginx? Nginx是一个web服务器和方向代理服务器,用于HTTP.HTTPS.SMTP.POP3和IMAP协议. 2.请列举Nginx的一些特性. Nginx服务器的特性包括: 反向代理/L7负