摘要: 我们以三个字符abc 为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc 的排列。当两个字符bc 的排列求好之后,我们把第一个字符a 和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac 的排列。现在是把c 放到第一位置的时候了。记住前面我们已经把原先的第一个字符a 和后面的b 做了交换,为了保证这次c 仍然是和原先处在第一位置的a 交换,我们在拿c 和第一个字符交换之前,先要把b 和a 交换回来。在交换b 和a 之后,再拿c 和处在第一位置的a 进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a 的排列。既然我们已经知道怎么求 阅读全文
posted @ 2012-10-23 21:43 代码改变未来 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 定义字符串的左旋转操作:把前面若干个移动到尾部。如把字符串 abcdef左旋转 2位得到字符串 cdefab。请实现字符串左旋转的函数要求时间对长度为 n的字符串操作复杂度为 O(n),辅助内存为 O(1)。分析:把字符串看成有两段组成的,记位XY。左旋转相当于要把字符串XY 变成YX。我们先在字符串上定义一种翻转的操作,就是翻转字符串中字符的先后顺序。把X 翻转后记为XT。显然有(XT)T=X。我们首先对X 和Y 两段分别进行翻转操作,这样就能得到XTYT。接着再对XTYT 进行翻转操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我们期待的结果。#include<iostr 阅读全文
posted @ 2012-10-23 15:02 代码改变未来 阅读(314) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>using namespace std;int continumax(char *outputstr,char *inputstr){ int length=0,max=0;char *tempstr=inputstr;//C风格字符串需要分配内存 while(*inputstr) { if(*inputstr>'9'||*inputstr<'0') { length=0;inputstr++; } if(*inputstr<='9'&&*inputstr>= 阅读全文
posted @ 2012-10-23 14:44 代码改变未来 阅读(207) 评论(0) 推荐(0) 编辑