Tag Archives: 字符串

在一个字符串中找到第一个只出现一次的字符

在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

题目不难,主要是两个条件,注意只出现一次,并且要第一个这种字符。

用stl的map什么的有点不合适,简单数组map即可。
char str_first(char* str)
{
char* ptr = str;
int map[255];
memset(map, 0, sizeof(int)*255);
// First O(N), count
while(*ptr!=[......]

继续阅读

数据结构重读 - KMP串匹配算法

设:m是模式串pattern的长度,n是主串长度

传统的字符串匹配(暴力法)的时间复杂度是O(n*m)。

而KMP串匹配算法可以将时间复杂度降为O(n+m),这需要一个额外的预处理O(m)。

KMP优化的地方在于:当出现字符失配的情况时,无需回溯i指针,而是利用已经匹配的部分,将模式串尽可能向右滑动一部分。

实际上:KMP的预处理本身就是一个模式串pattern“自我匹配”的过程。因此,预处理和kmp算法主体非常神似。

预处理过程:
int get_next(ch[......]

继续阅读

数据结构重读 - 字符串基本操作

字符串(string)是由零个或者多个字符串组成的有限序列。

字符串中字符的数目称为字符串的长度

串中任意个连续字符组成的子序列称为改串的子串。包含子串的串相应地称为主串

串相等:当且仅当两个串的长度相等,并且各个对应位置的字符都相等时。

由一个或者多个空格组成的串'  '称为空格串,非空字符串!

C语言中的字符串最末尾是'\0',这个不用解释了。

串赋值StrAssign、串比较StrCompare、串求长StrLength、串连接StrConcat以及[......]

继续阅读

C++使用strtok实现分割字符串。

C++中有一些号称很优雅的功能和方法……但是有的压根不能指定分隔符,有的依赖于stream所以分隔符只能是char,真是Ugly到家了……

比如stackoverflow中提到的诸多方法:http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

其实strtok是标准的c函数啊,而且现在重入问题也已经被解决了,通过保存指针的方式,为什么不喜欢用呢?
我一直认为,C++是最难用的语言,没有之一。

9[......]

继续阅读