LeetCode OJ 之 Reverse Words in a String (翻转字符串的单词)

题目:

Given an input string, reverse the string word by word.(给定一个输入字符串,按单词翻转这个字符串)

For example,
Given s = "the sky is blue",
return "blue is sky the".

Clarification:

  • What constitutes a word?
    A sequence of non-space characters constitutes a word.(没有空格的连续字符组成了一个单词)
  • Could the input string contain leading or trailing spaces?(字符串的开头和结尾是否可以为空格)
    Yes. However, your reversed string should not contain leading or trailing spaces.(可以,但是翻转后的字符串开头和结尾不能有空格)
  • How about multiple spaces between two words?(如果两个单词直接有多个空格怎么办)
    Reduce them to a single space in the reversed string.(翻转后的字符串空格减少到只有一个)
思路:

把单词存入一个容器中,然后再reverse一下,然后按顺序赋给s即可。(注意当s为空或者s全是空格时,转换后的s为空)

代码:

class Solution {
public:
    //要考虑到空字符串以及只有空格组成的字符串(注意空和空格字符的区别)
    void reverseWords(string &s) 
    {
    	vector<string> svec;//存储s的每个单词,不包含空格
    	//s为空直接返回
    	if(s.empty())
    		return;
    	for(size_t i = 0 ; i < s.size() ; i++)
    	{
    	    //如果当前字符为空格
    		if(s[i] == ' ')
    			continue;
    		string word;//临时保存当前的单词,在这里定义的好处是下次循环时word初始值又为空了
    		//开始写成了while(s[i] != ' ' && i < s.size()),一直出现访问越界问题
    		//因为当i == s.size()时,先访问了s[i]而不是先判断i<s.size(),导致访问越界,这种问题以前还没碰到过,还是写的代码太少了啊
    		while(i < s.size() && s[i] != ' ')
    		{
    			word += s[i];
    			i++;
    		}
    		svec.push_back(word);//把当前单词放入容器
    	}
    	reverse(svec.begin(),svec.end());//把单词翻转一下,也可以不翻转,而是按逆序把单词放入s中
    	//如果svec为空,说明s全为空格,则直接令s为空即可
    	if(svec.empty())
    		s = "";
    	else
    	{
    		s.clear();//先清空s
    		size_t i = 0;
    		//因为题目要求最后一个字符不能是空格,因此先遍历到倒数第二个单词
    		for(i = 0 ; i < svec.size()-1 ; i++)
    		{
    			s += svec[i];//把当前单词加到s后面
    			s += ' ';//在s后面再补一个空格
    		}
    		s += svec[i];//最后把最后一个单词补上,这样最后一个字符就不是空格了
    	}
    }
};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用reverse函数反转leetcode字符串的方法是:将字符串作为参数传入reverse函数,然后将反转后的字符串返回给调用者。例如:let reversedString = reverse("leetcode")。 ### 回答2: 要使用reverse函数反转leetcode这个字符串,可以使用以下步骤: 1. 将字符串"leetcode"转换为字符数组。可以使用字符串的toCharArray()方法,该方法会返回一个字符数组,其中每个元素是字符串的一个字符。 2. 定义两个指针,left和right,分别指向字符数组的首尾。 3. 循环交换left和right指向的字符,然后将left指针向右移动一位,将right指针向左移动一位,直到left指针大于等于right指针。 4. 将反转后的字符数组转换回字符串。可以使用字符数组的valueOf()方法,该方法会将字符数组转换为一个新的字符串。 以下是用Java代码实现上述步骤的示例: ```java public String reverseString(String s) { // 将字符串转换为字符数组 char[] chars = s.toCharArray(); // 定义两个指针 int left = 0; int right = chars.length - 1; // 循环交换字符 while (left < right) { char temp = chars[left]; chars[left] = chars[right]; chars[right] = temp; left++; right--; } // 将字符数组转换为字符串 return String.valueOf(chars); } ``` 通过调用reverseString("leetcode")函数,将会返回字符串"edocteel",即将"leetcode"反转的结果。 ### 回答3: 要使用reverse函数来反转字符串"leetcode",只需将字符串转换为一个列表,然后使用reverse函数来翻转该列表,最后将列表转回字符串即可。 首先,将字符串"leetcode"转换为一个字符列表,可以使用list函数来实现,即list("leetcode"),得到列表['l', 'e', 'e', 't', 'c', 'o', 'd', 'e']。 接下来,使用reverse函数来反转该列表,即reverse(['l', 'e', 'e', 't', 'c', 'o', 'd', 'e'])。 最后,将翻转后的列表转换回字符串,可以使用join函数将列表中的字符连接起来,即''.join(['e', 'd', 'o', 'c', 't', 'e', 'e', 'l'])。 所以,将字符列表['l', 'e', 'e', 't', 'c', 'o', 'd', 'e']翻转并转换为字符串的过程为:''.join(reverse(list("leetcode"))),得到的结果为"edocteel",即字符串"leetcode"反转后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值