557. 反转字符串中的单词 III(字符串Leetcode557)--------------c/c++语言实现
题目表述
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
样例
输入:s = “Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”
条件
1 <= s.length <= 5 * 104
s 包含可打印的 ASCII 字符。
s 不包含任何开头或结尾空格。
s 里 至少 有一个词。
s 中的所有单词都用一个空格隔开。
思路
扫描单个单词,然后进行替换。
注意点
strlen(str)的返回值为str的长度,不包括‘\0’
ac代码
char * reverseWords(char * s){
int Ssize,longth=0,i=0,change,x;
Ssize=strlen(s);
while(i<Ssize){
for(int j=i;j<Ssize;j++)
{
if(s[j]==' ')
break;
else{
longth++;
}
}//选出了单个单词
//下面是转换
change=longth/2;
for(int j=i;j<i+change;j++){
x=s[j];
s[j]=s[i+longth-1-j+i];
s[i+longth-1-j+i]=x;
}
//转换结束 写的有点麻烦
i=i+longth;
while(s[i]==' ')
i++;
//过滤掉单词后的空格
longth=0;
}
}
其中转换可以这样写
int left = i, right = i +longth-1;
while (left < right) {
char tmp = s[left];
s[left] = s[right], s[right] = tmp;
left++;
right--;
}
//命名写法通俗易懂,代码来源于leetcode题解
代码(c++)
class Solution {
public:
string reverseWords(string s) {
int now=0,longth;
while(now<s.size())
{
longth=0;
while(s[now]!=' '&&now<s.size())
{
now++;longth++;
}
if(longth>0)
swap(s,now-longth,now-1);
now++;
}
return s;
}
void swap(string &s,int now,int end)
{
char x;
while(now<end)
{
x=s[now];
s[now++]=s[end];
s[end--]=x;
}
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。