社区
C++ 语言
帖子详情
一个关于C++字符串操作的算法
北京迅哥
2006-04-29 10:12:30
那天面试遇到几个题:
1,输入一个字符串,所有字符均为ASCII码,如果其中有两个或以上字符是相同的则返回1,否则返回0;
a. 写出一个你认为速度最快的算法
b. 写出一个占用空间最少的算法。
2。对于上述字符串,如果所有的字符的ASCII码都在0x20<=C<=0x7f之间,对于大于96个字符长度的字符串,有什么优化的方法,并写出代码。
...全文
329
9
打赏
收藏
一个关于C++字符串操作的算法
那天面试遇到几个题: 1,输入一个字符串,所有字符均为ASCII码,如果其中有两个或以上字符是相同的则返回1,否则返回0; a. 写出一个你认为速度最快的算法 b. 写出一个占用空间最少的算法。 2。对于上述字符串,如果所有的字符的ASCII码都在0x20<=C<=0x7f之间,对于大于96个字符长度的字符串,有什么优化的方法,并写出代码。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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/
C++
指针经典资料大全
C/
C++
指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
C/
C++
字符串
压缩
算法
详解及源码
Run-Length Encoding (RLE):将连续重复出现的字符或字符序列用
一个
计数值和该字符表示。例如,
字符串
“AAAABBBCCDAA” 可以被压缩为 “4A3B2C1D2A”。
字符串
压缩
算法
是一种用于减少
字符串
所占用存储空间的技术。其基本思想是将重复出现的字符或字符序列用更短的方式表示,从而减少存储空间的使用。Huffman 编码:根据字符出现的频率构建 Huffman 树,将出现频率高的字符用较短的编码表示,从而减少存储空间的使用。
C/
C++
字符串
操作
总结(更新ing)
在
C++
中我们可以使用 字符数组 来代替
字符串
,但
字符串
与字符数组不是完全等价的。
C++
字符串
与字符数组区别在
C++
中,
字符串
必须是以 做为结尾的,但字符数组没有这个要求。
字符串
一定是
一个
char 类型的数组,但 char 的数组未必是
字符串
。数字 0(和字符 ‘\0’ 等价)结尾的 char 数组 就是
一个
字符串
,但如果 char 数组没有以数字 0 结尾,那么就不是
一个
字符串
,只是普通字符数组,所以
字符串
是一种特殊的 char 数组。
C++
字符串
与字符数组对比详解这里,我们指定了数组的长度,
C/
C++
字符串
替换
算法
详解及源码
字符串
替换
算法
是一种用来在
字符串
中找到指定的模式并进行替换的
算法
。在
字符串
替换
算法
中,我们需要找到需要替换的目标
字符串
,并将其替换为指定的
字符串
。一种常用的
字符串
替换
算法
是使用KMP
算法
来实现。该
算法
的主要思想是利用模式串的前缀和后缀的最长公共子串,从而减少比较的次数,提高查找效率。
C++
字符串
的常用
操作
这并不是最理想的
算法
,但却这是
字符串
匹配
算法
中最容易理解的
算法
,
算法
核心为给定
一个
主串T和
一个
模式串P,求问是否P是属于T的
一个
字串,如:”Hello”中”llo”就是其中的
一个
字串,对于暴力匹配
算法
而言,我们可以利用两层循环进行比对,第一层循环中找寻T
字符串
中的每
一个
字符,第二层循环找寻的是每
一个
P字符,进入第二层循环时T
字符串
也会跟着进行字符前进,如果发生不匹配则产生
一个
回溯回到第一层循环的进入字符的下
一个
字符。输出Welcome Hello。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章