LeetCode: Reverse Words in a String
2014-09-29 20:18
337 查看
题目:
Given an input string, reverse the string word by word.
For example,
Given s = "
return "
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.
答案:
解析:
首先要了解最普通的串是什么情况 : “ blue is sky the ”。像这种情况一般要进行4步
1》去除多余空格。输出为 "
2》计算空格的位置。
3》计算每个单词中每个字母在进行调节之后的相对位置。
4》进行位置调节。
加上用到的一个substr()函数,总体复杂度为5n,即:O(n)。
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.
答案:
void reverseWords(string &s) { string s0 ; unsigned int x1 = s.length(); unsigned int* x = new unsigned int[x1 + 1]; //用来存储空格的位置 unsigned int* xx = new unsigned int[x1 + 1]; //用来存储字母的相对位置 unsigned int j = 0; for (unsigned int i = 0; i < x1 + 1; i++) //初始化数组 { xx[i] = -1; x[i] = -1; } unsigned int m = 0; //去除多余空格 for (unsigned int i = 0; i < x1; i++) { if (s[i] != ' ') s0 += s[i] ; else if (i > 0 && s[i] == ' ' && s[i-1] == ' ') { continue; } else if (i == 0) { continue; } else { s0 += ' '; } } s0 = s0.substr(0, s0.find_last_not_of(' ')+1); //计算空格的位置 unsigned int length0 = s0.length(); for (unsigned int i = 0; i < length0 ; i++) { if (s0[i] == ' ') { x[m] = i; m++; } else if (i == length0 - 1) x[m] = i+1; } //计算字母的相对位置 m = 0; int n = 0; for (unsigned int i = 0; i < length0 ; i++) { if (i < x[m]) { xx[i] = length0 - (x[m]- n); n++; } else { xx[i] = UINT_MAX; n = 0; m++; } } //进行调节 m = 0; s = s0; for (unsigned int i = 0; i < length0 ; i++) { if (xx[i] != UINT_MAX) s[xx[i]] = s0[i]; else if (x[m] != length0) { s[length0 - x[m] - 1] = ' '; m++; } } delete[] x; delete[] xx; return; }
解析:
首先要了解最普通的串是什么情况 : “ blue is sky the ”。像这种情况一般要进行4步
1》去除多余空格。输出为 "
the sky is blue"
2》计算空格的位置。
3》计算每个单词中每个字母在进行调节之后的相对位置。
4》进行位置调节。
加上用到的一个substr()函数,总体复杂度为5n,即:O(n)。
相关文章推荐
- Leetcode 第151题 最新题解 Reverse Words in a String
- leetcode JAVA Reverse Words in a String 难度系数2-3?最新题151
- LeetCode(151)Reverse Words in a String
- Leetcode: Reverse Words in a String
- LeetCode Reverse Words in a String
- 【LeetCode with Python】 Reverse Words in a String
- [LeetCode]Reverse Words in a String
- leetcode Reverse Words in a String
- [leetcode]Reverse Words in a String
- Leetcode_Reverse-Words-in-a-String
- LeetCode | Reverse Words in a String
- Reverse Words in a String (LeetCode)
- [Leetcode Solution] Reverse Words in a String
- LeetCode151:Reverse Words in a String
- 【LeetCode】Reverse Words in a String
- [leetCode]Reverse Words in a String
- leetcode - Reverse Words in a String
- [LeetCode] Reverse Words in a String
- 【LeetCode】Reverse Words in a String
- 【LeetCode】Reverse Words in a String