Skip to content

Commit 7abf0bd

Browse files
authored
Create syuan.md
1 parent 265cfee commit 7abf0bd

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

2018.11.28-leetcode151/syuan.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
##### 题目
2+
```
3+
给定一个字符串,逐个翻转字符串中的每个单词。
4+
5+
示例:
6+
7+
输入: "the sky is blue",
8+
输出: "blue is sky the".
9+
10+
说明:
11+
12+
无空格字符构成一个单词。
13+
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
14+
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
15+
16+
进阶: 请选用C语言的用户尝试使用 O(1) 空间复杂度的原地解法。
17+
```
18+
##### 思路
19+
- 先将整个字符串反转
20+
- 按照空格分成String数组
21+
- 每个单词反转
22+
##### 代码
23+
24+
```
25+
public class Solution {
26+
public String reverseWords(String s) {
27+
int length=s.length();
28+
//当字符串为空
29+
if(s == null){ return null;}
30+
//当字符串为" "时 直接返回null
31+
if(s.trim().equals("")){
32+
return s.trim();
33+
}
34+
35+
//1.反转整个字符串
36+
String allRevStr=ReverseWord(s);
37+
//2.获得每个单词
38+
String[] strChar=allRevStr.split(" ");
39+
40+
//3.反转每个字符串
41+
String reverse="";
42+
for (int i=0; i<strChar.length; ++i) {
43+
String temp=ReverseWord(strChar[i]);
44+
if (temp.equals("")) {
45+
continue;
46+
}
47+
48+
if (i==strChar.length-1) {
49+
reverse=reverse+temp;
50+
}else{
51+
reverse=reverse+temp+" ";
52+
}
53+
}
54+
return reverse;
55+
}
56+
57+
String ReverseWord(String s){
58+
//删除字符串前序和后继中的空格
59+
String str=s.trim();
60+
if (str.length()==1) {
61+
return str;
62+
}else if (str.equals("")) {
63+
return "";
64+
}else{
65+
StringBuilder sb=new StringBuilder(str);
66+
String revStr=sb.reverse().toString();
67+
return revStr;
68+
}
69+
}
70+
71+
}
72+
```
73+
74+
##### 改进方法
75+
76+
```
77+
public class Solution {
78+
public String reverseWords(String s) {
79+
int length=s.length();
80+
//当字符串为空
81+
if(s == null){ return null;}
82+
//当字符串为" "时 直接返回null
83+
if(s.trim().equals("")){
84+
return s.trim();
85+
}
86+
/**
87+
* 先将字符串按照空格分裂为字符串数组
88+
* 然后收尾两个指针来交换即可
89+
*/
90+
//0.掐头去尾
91+
String allRevStr=s.trim();
92+
//1.将字符串按照空格分裂为字符串数组
93+
String[] strChar=allRevStr.split(" ");
94+
95+
//2.使用首尾两个指针来交换
96+
int left=0;
97+
int right=strChar.length-1;
98+
String temStr=null;
99+
while(left<right){
100+
//交换
101+
temStr=strChar[left];
102+
strChar[left]=strChar[right];
103+
strChar[right]=temStr;
104+
//移动指针
105+
left++;
106+
right--;
107+
}
108+
//3.拼接好新的字符串
109+
String reverse="";
110+
for (int i=0; i<strChar.length; ++i) {
111+
//对每一个单词掐头去尾
112+
String temp=strChar[i].trim();
113+
114+
if (temp.equals("")) {
115+
continue;
116+
}
117+
118+
if (i==strChar.length-1) {
119+
reverse=reverse+temp;
120+
}else{
121+
reverse=reverse+temp+" ";
122+
}
123+
}
124+
return reverse;
125+
}
126+
}
127+
```

0 commit comments

Comments
 (0)