题目大意:
给定字符串表示的句子,在单词间做逆序调整。单词内部字符次序不变。
如“cat loves dog” 变化结果为“dog loves cat”
思路:
1、实现字符串内部任意区间内所有字符逆序的函数f
2、用f处理整个字符串为“god sevol tac”
3、找到逆序大字符串中每一个单词的区域,通过f对每一个单词逆序处理为“dog loves cat”
代码实现:
class Reverse {
public:
void reverseInterval(string &A,int i,int j){//i,j 代表待逆序序列两边的index,注意这里要用到引用传递
while(i<j){
char temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
j--;
}
}
string reverseSentence(string A, int n) {
// write code here
reverseInterval(A,0,n-1);
int left = 0,right = 0,index = 0;
while(index<n){
while(index < n && A[index]==' ')//用“ ”双引号表示是错误的
index++;
left = index;
while(index < n && A[index]!= ' ')
index++;
right = index-1;
if(left<=right)
reverseInterval(A,left,right);
}
return A;
}
};
自己踩坑的几个点:
1、字符之间比较空格符要表示为‘ ’而不是“ ”,即用单引号括起来。
2、在子串逆序时,字符串引用传递。实参应该是 string &A。
3、在字符串中遍历找单词区间时,注意对当前index进行越界判断,防止数组越界。