社区
C++ 语言
帖子详情
一个关于C++字符串操作的算法
北京迅哥
2006-04-29 10:12:30
那天面试遇到几个题:
1,输入一个字符串,所有字符均为ASCII码,如果其中有两个或以上字符是相同的则返回1,否则返回0;
a. 写出一个你认为速度最快的算法
b. 写出一个占用空间最少的算法。
2。对于上述字符串,如果所有的字符的ASCII码都在0x20<=C<=0x7f之间,对于大于96个字符长度的字符串,有什么优化的方法,并写出代码。
...全文
323
9
打赏
收藏
一个关于C++字符串操作的算法
那天面试遇到几个题: 1,输入一个字符串,所有字符均为ASCII码,如果其中有两个或以上字符是相同的则返回1,否则返回0; a. 写出一个你认为速度最快的算法 b. 写出一个占用空间最少的算法。 2。对于上述字符串,如果所有的字符的ASCII码都在0x20<=C<=0x7f之间,对于大于96个字符长度的字符串,有什么优化的方法,并写出代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mhisky
2006-05-10
打赏
举报
回复
mark
tomtom123
2006-04-30
打赏
举报
回复
MARK
liusujian02
2006-04-30
打赏
举报
回复
可以邮箱联系:liusujian-duck@163.com
liusujian02
2006-04-30
打赏
举报
回复
看到你的这个题目,觉得挺好,但是由于机器现在没有安装C/C++的编译程序,所以只能略微表示自己的看法,现简单描述如下:
1、
a、时间最快(牺牲空间换取时间)
定义第一个结构数组(第一字段为ASCII字符,第二个字段为ASCII字符当前出现的次数)
定义第二个哈希表结构(第一个字段为KEY,第二个字段为ASCII字符在第一个结构数组中的
下标)
顺序查找输入字符串,并通过哈希表达式计算该字符在结构数组中的位置(直接一步到
位),并通过第二个字段判断是返回1还是0;
------------仅仅代表个人意见
b、空间最小
空间体现在:
1、存储输入的字符(必不可少)
就用这些存储就可以实现
实现步骤:(以两个相同为基准)
循环{
a、取得当前字符
b、从当前字符的下个字符循环至字符串尾
c、如果存在与当前字符一样的字符,则返回0,退出循环
d、如果不存在与当前字符一样的字符,则返回1,进入下轮循环
}
空间为存储字符的空间,时间复杂度:(1+2+3+.....+(n-1)) 也就是:N的平方
2、对于第二个问题,不太明白你的意思
只是知道0x20<=C<=0x7f最高位可以利用一下,可以描述的清楚一些吗?谢谢
或者我先理解一下,然后回复你吧!
桂林电子科技大学计算机系
信息管理与信息系统
2006.4.30
sharpdew
2006-04-30
打赏
举报
回复
我觉得应该扩展一下这个问题才有难度,就是:
如果字符串中包含汉字的话,其它同问题阐述一样,怎么办?
假设采用gbk编码。
sharpdew
2006-04-30
打赏
举报
回复
上面的代码连第二题也给你回答了!
sharpdew
2006-04-30
打赏
举报
回复
给你一个时间空间都很精简的:
char onesame(const char* p)
{
int mark[4] = {0};
int bit = 0x01;
for(; *p != 0; p++)
{
unsigned char m = (*p-1)/31;
unsigned char n = *p - 32*m-1;
if( mark[m] & bit << n )
return *p;
else
mark[m] = mark[m] | bit << n;
}
return 0;
}
int main()
{
const char* p = "abckcdbh";
cout << onesame(p) << endl;
return 0;
}
方法:位存储状态,位操作模拟字符计数。
fdimim
2006-04-29
打赏
举报
回复
1.
a)/////////////////////
bool finds(char * s)
{
char arr[128] = {0};
for(; *s != '\0'; ++s)
{
if(arr[int(*s)] == -1)
return true;
else
arr[int(*s)] = -1;
}
return false;
}
b)//////////////
bool finds(char * s)
{
if (s==NULL)
return false;
char * p = NULL;
for(; *s != '\0'; ++s)
for(p=s+1; *p!='\0'; ++p)
if(*p == *s)
return true;
return false;
}
2.大概是要用性能好些的搜索算法替换上面普通的
herman~~
2006-04-29
打赏
举报
回复
顶一下
免费下载:C语言难点分析整理.doc
16. C语言
字符串
函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 ...
【
C++
】
字符串
的基本
操作
和相关
算法
题
思路一、问题背景二、
字符串
的插入、删除和追加
操作
详解【
C++
】三、相关
算法
题【
C++
】 一、问题背景 首先来说
字符串
问题是十分经典的类型,我们经常会遇到输入是
字符串
的题目,然后利用各种STL标准库或者是一些...
C++
字符串
操作
详解
C++
字符串
入门全解
第78篇
C++
实现
字符串
匹配(三)KMP
算法
第78篇
C++
字符串
匹配(三)KMP
算法
1.KMP
算法
简单描述2.自解next3.原next4.改进next5.KMP代码5.1.原KMP5.2.改进KMP6.所有代码 1.KMP
算法
简单描述 首先上大佬的链接 数据结构KMP
算法
配图详解(超详细) 虽然别人写得...
C++
常用
算法
及数据结构(
字符串
匹配
算法
)
然后,在文本串中滑动窗口,比较窗口的哈希值与模式串的哈希值是否相等,以及窗口内的
字符串
与模式串...
字符串
匹配
算法
是指在
一个
文本串(较长的
字符串
)中查找
一个
模式串(较短的
字符串
)的出现位置或匹配情况的
算法
。
C++ 语言
64,649
社区成员
250,477
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章