1.字符串翻转
//实现字符串的反转 ,例如how are you 变 you are how
// 以及单词的反转,单词的反转即是先全部反转,然后在把每个单词反转
2.统计字符串中单词个数
/
统计一个字符串中出现单词的个数
单词的前一个字符为空才代表出现的是单词。只需要用一个标志位记录前一个是否是空格即可
/
3.字符串去重
/
删除字符串中重复的字符如good应该变成god
此问题也有两种办法第一蛮力遍历把重复的先变为’\0’,再去掉
方法二空间换时间因为字符个数也是256,也可以根据记录个数去重(另提供更节省空间的法三)
/
4.字符的组合
/
求例如输入字符串abc,那么a、b、c三个字符共有多少种组合(假设字符串中所有字符都不重复)
a、b、c、ab、ac、bc、abc
此题我们就不考虑暴力的解法了
//方法一:递归
//方法二:用二进制数来表示字符的出现与不出现如011代表bc,111代表abc,100代表a
/
5.字符串大小比较
/
判断两个字符串是否有相同的字符组成 如aaaabbc与abcbaaa就是。组成字符及个数都相同
解决此问题有两种方法法一就是将他们排序,然后比较两个字符串是否相等
方法二:时间换空间也就是桶记录他们每个字符的个数以及是否存在来确定
/
6.字符的全排列
针对1,2,2,3,4,5这六个数字,写成一个函数,打印出所有不同的排列,例如512234,215432,
要求“4”不能在第三位,“3”与“5”不能相连。
另给出 1,2,3组成全排列无限制方法
|
|
7.字符串的全排列
/*
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 /
*/
8.字符串是否含有子字符串(KMP算法)
|
|
9.动态规划解决最大公共子串
/*
这是一道标准的动态规划问题,求两个字符串的最大公共子串
例如 String a = “abcde”
String b = “abc”
那么最长公共子串为abc
可以建立一个二维数组p[i][j]代表到达字符串1的位置,字符串j位置时候的最大公共字符串
可以得到如下公式
| "" (String1char[i]!=String2char[j])
p[i][j]= | String1char[i]或者String2char[j] (i=0或者j=0)
| p[i-1][j-1] + char (String1char[i]==String2char[j])
*/
10.动态规划解决最长回文长度
/*
题目:所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,
比如:”aba”,”abba”.对于一个字符串,可以通过删除某些字符二编程回文字符串,
如:“cabebaf”,删除“c,e,f”后剩下子串“abba”就是回文字符串。
要求:给定任意一个字符串,字符串的最大长度1000,计算出最长的回文字符串长度。
输入:字符串
输出:最大的回文字符串的长度。
分析:回文即是从前到中和从后到中完全一致
那么如果第一个字符和最后一个字符相等,那么最长回文串长度就是中间的最长回文串+2
如果第一个字符和最后一个字符不相等,那么最长子串的长度就是去掉头字符的最长子字符串和去掉尾结点的最长子字符串长度
既有方程
|p[i+1][j-1] + 2;(char[i]==char[j] i<j)
p[i][j]= |p[i+1][j-1] + 1;(char[i]==char[j] i==j中间单个字符)
|max(p[i+1][j],p[i][j-1])
为了方便写循环
p[i][j]代表j-i之间最大回文的长度,
*/