算法试题 - 字符串

 

1.  输入一个字符串,打印出该字符串中字符的所有排列。

例如输入字符串abc,则输出由字符a, b, c所能排列出来的所有字符串abc, acb, bac, bca, cab和cba。

 

2.  有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。C语言函数原型void proc(char *str)。

 

3.  编写反转字符串的程序,要求优化速度、优化空间。

 

4.  用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。

memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。

 

5.  编程找出两个字符串中最大公共子字符串,如”abccade”, “dgcadde”的最大子串为”cad”。

 

6.  输入一个字符串,输出该字符串中对称的子字符串的最大长度。

比如输入字符串”google”,由于该字符串里最长的对称子字符串是”goog”,因此输出4。

 

7.  字符串原地压缩。题目描述:“eeeeeaaaff” 压缩为 “e5a3f2″,请编程实现。

 

8.  请以回溯与不回溯算法实现字符串匹配。

 

9.  输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如,输入”I am a student.”,则输出”student. a am I”。

 

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

 

11.  写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。

例如:”abcd12345ed125ss123456789″的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789。

 

12.  定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。

如:把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。

 

13.  有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接。

问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。

 

14.  如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。

注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。

请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。

例如,输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。

 

15.  输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。

例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。

 

16.  一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba。

 

17.  给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。

 

18.  已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数,如果没有返回0,有的话返回子字符串的个数。

 

19.  求最大连续递增数字串(如”ads3sl456789DF3456ld345AA”中的”456789″)。

 

20.  实现strstr功能,即在父串中寻找子串首次出现的位置。

 

21.  编码完成下面的处理函数。

函数将字符串中的字符’*’移到串的前部分,前面的非’*’字符后移,但不能改变非’*’字符的先后顺序,函数返回串中字符’*’的数量。

如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)

 

22.  删除字符串中的数字并压缩字符串。如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。

 

23.  求两个串中的第一个最长子串。如”abractyeyt”,”dgdsaeactyey”的最大子串为”actyet”。

 

24.  在一个字符串查找一个最长子串,要求这个子串的每个字符相同。 

 

25.  编码实现字符串转整型的函数(实现函数atoi的功能)。

 

26.  实现strstr功能,即在父串中寻找子串首次出现的位置。

 

27.  不开辟用于交换数据的临时空间,如何完成字符串的逆序。

 

28.  删除串中指定的字符。

 

29.  判断一字符串是不是对称的。

 

30.  输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a, b, c, ab, ac, bc, abc。

 

点赞