经典算法-字符串的颠倒
2014-04-10 22:25
239 查看
最优状态下字符串的颠倒(字符串的反转)
2005-11-18 10:18:35
FROM:http://www.exuesoft.com/article/View.aspx?NewsID=116
void Reverse(char s[])
{
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
此函数原出自Kernighan和Ritchie合作的经典作品TCPL第二版
评注:此算法无论是从时间复杂度,还是从使用最小空间方面,都应该是最优了。
时间上只用了遍历字符串长度一半的时间,空间上只是创建字符串长度
一半的空间。当然我们还可以从空间上进一步减少使用。
void Reverse(char s[])
{
char c;
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
我们从外部声明c,这样在整个字符串反转过程中我们就只使用了一个变量。空间使用
更小了!但是我们必须要考虑的一个问题是,当我们传递的字符串只用一个字符的时候,
上面的算法,不如第一个算法效率高,因为上面的这个函数,多创建了一个没有使用的
char对象,并且C++语言推荐:"尽可能推迟对变量声明"。所以真正我还是同意用《TCPL》
上的那种方法,在使用出定义char c=s[i]的形式!
2005-11-18 10:18:35
FROM:http://www.exuesoft.com/article/View.aspx?NewsID=116
void Reverse(char s[])
{
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
此函数原出自Kernighan和Ritchie合作的经典作品TCPL第二版
评注:此算法无论是从时间复杂度,还是从使用最小空间方面,都应该是最优了。
时间上只用了遍历字符串长度一半的时间,空间上只是创建字符串长度
一半的空间。当然我们还可以从空间上进一步减少使用。
void Reverse(char s[])
{
char c;
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
我们从外部声明c,这样在整个字符串反转过程中我们就只使用了一个变量。空间使用
更小了!但是我们必须要考虑的一个问题是,当我们传递的字符串只用一个字符的时候,
上面的算法,不如第一个算法效率高,因为上面的这个函数,多创建了一个没有使用的
char对象,并且C++语言推荐:"尽可能推迟对变量声明"。所以真正我还是同意用《TCPL》
上的那种方法,在使用出定义char c=s[i]的形式!
相关文章推荐
- C语言经典算法-字符串的颠倒
- 经典算法-字符串的颠倒
- 【经典算法】:求一个字符串的主元素(o(n)复杂度)
- 算法竞赛入门经典: 第三章 数组和字符串 3.1逆序输出
- 一个非常经典的算法查找字符串中每个字符的个数。
- 【经典算法】:判断一个字符串是不是标志符的算法实现
- 经典算法题--求对策字符串的最大长度(第二版)
- ACM经典算法之字符串处理
- C语言之基本算法39—字符串经典操作
- 【经典算法】:如何把一行带有分隔符的字符串分割
- 算法与数据结构面试题(9)-颠倒字符串
- 经典的字符串模式匹配算法KMP算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- 经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)
- 算法竞赛入门经典: 第三章 数组和字符串 3.2开灯问题
- ] 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- Java经典实例:按字符颠倒字符串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串