Leetcode 151) Reverse Words in a String
in Algorithms
https://leetcode.com/problems/reverse-words-in-a-string/
- Lesson from this problem
- Use library, API. totally okay
- Make sure to consider both ends.
- Write comments to clarify what function that code does
class Solution {
public String reverseWords(String s){
int ptr =s.length()-1;
String result ="";
boolean first= true;
boolean space_trim = true;
while(space_trim){
if(s.charAt(ptr)==' '){
ptr--;
}else{
space_trim=false;
}
}
while(ptr>-1){
//문자일 때나 공백이 처음이 아닐 때 계속 빼주기.
if(ptr==0 && s.charAt(ptr)!=' '){
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=' '){
if(i==0 && result.length()!=0){
result+=' ';
}
result+=s.charAt(i);
}else{
i=s.length();
}
}
break;
}
if((s.charAt(ptr)!=' ' || !first)){
ptr--;
first=true;
}else{
//문자만 나오다가 공백이 처음 나온 경우
for (int i=ptr+1; i<s.length(); i++){
// ' hello ' 이 단어에서 hello만 빼내는 작업.
if(s.charAt(i)!=' '){
//단어의 처음이고, result 가 막 시작하지 않는 경우
if(i==ptr+1 && result.length()!=0){
result+=' ';
}
result+=s.charAt(i);
}else{
i=s.length();
}
}
first= false;
}
}
return result;
}
};
깔끔 솔루션
- Stringbuilder 사용…
- ” “ 를 기준으로 split해 어레이에 저장
- word를 다 reverse함.
- stringbuilder로 합친다..
class Solution {
public String reverseWords(String s) {
String[] words = s.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = words.length - 1; i >= 0; i--) {
if (words[i].length() == 0) continue;
sb.append(words[i]).append(' ');
}
return sb.substring(0, sb.length() - 1).toString();
}
}