算法--将字符串中*号移到左边,字母移到右边,保持字母相对顺序不变
2014-11-24 17:06
337 查看
这是一个O(n)时间复杂度实现的,看代码应该可以明白
#include<stdio.h> void Swap(char& a, char& b) { a=a^b; b=a^b; a=a^b; } char* StrMv(char* str, int n) { int high=0; int i=n-2; while(*(str+i)!='*') i--; high=i; while(i>=0) { if(*(str+i)=='*') i--; else { Swap(*(str+i), *(str+high)); high--; } } return str; } int main(int argc, char** argv) { char str[61]="******ab*cd**dn**gedt**kfhjk*f***k****mg**j*afa*ik****adfa**"; printf("%s\n", StrMv(str, 61)); return 0; }
相关文章推荐
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串为*号和26个字母的任意组合把*号都移动到最右侧,把字母移到最右侧并保持相对顺序不变
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动:字符串为*号和26个字母的任意组合把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串重新排序,数字字符移到右边,字母字符移到左边,保持字符在原字符串中的前后顺序不变
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小 .
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 字符串移动(字符串为’*’号和26个字母的任意组合, 把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 将字符串中的字母倒序,数字顺序保持不变
- 给定一个无序数组,请调整该数组,调整成奇数放在数组的左边,偶数放在数组的右边。但是奇数与奇数之间的相对顺序不变,偶数和偶数之间的相对顺序也不变。
- 【原创】将一个数组中的0元素全部排到数组的右边,其他元素相对顺序保持不变。
- 对一个字符串里的字母倒序,别的字符保持原位不变
- <顺序表>从一个无序顺序表(也可以有序)中删除重复的元素,并使剩余元素间的相对次序保持不变
- 【大家来一起讨论吧】百度面试题,假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求:o(n),o(1)
- 请编写一个函数fun(char *s),其功能是:将s所指字符串中所有的字母改写成该字母的下一个字母,若是z字母,则改为a字母,大、小写保持不变。
- 奇数在前 偶数在后,相对顺序保持不变
- 汇编语言: 从键盘上输入一串字符(用回车键结束,使用10号功能调用。),将其中的小写英文 字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。
- 【算法逻辑】保持字符串内符号位置不变,其他字符随机变化
- 华北计算所其中一道机试题,逆转字符串,但是单词顺序不变,字符串中只含有字母和空格