第一道题其实就是剑指offer中调整数组顺序使奇数位于偶数前变形题。 如果需要保证相对顺序不变的话,可以直接另开两个字符串空间,第一个字符串保存#,另一个字符串保存字母,最后将这两个字符串的和重新赋值给原先的字符串。 void string_shift2(string &s,int len) { if(s.empty()) return; string s1,s2; for(auto e:s) { if(e=='#') s1+=e; else if(isalpha(e)) s2+=e; } s=s1+s2; } 如果不需要保证相对顺序的话,可以维护两个指针。第一个指针指向字符串的第一个字符,它只向后移动,直到遇见字符为字母,第二个指针指向数组的最后一个字符,它只向前移动,直到遇到#。然后交换两个指针的内容,一直重复上述过程,直到两个指针相遇。 void string_shift(string &s,int len) { if(s.empty()) return; int index1=0; int index2=len-1; while(index1<index2) { while(index1<index2&&!isalpha(s[index1])) ++index1; while(index1<index2&&isalpha(s[index2])) --index2; if(index1<index2) swap(s[index1],s[index2]); } }
点赞 2

相关推荐

牛客热帖

牛客网
牛客企业服务