728x90
https://leetcode.com/problems/reverse-string-ii/
Reverse String II - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문자열 s와 정수 k가 주어진다.
- 문자열의 시작부터 매 2k 문자마다 첫 번째 k자를 반전시킵니다.
- 만약 남은 문자가 k보다 적다면, 그들 전체를 reverse
- 만약 2k보단 적지만 k보다 크거나 같다면, 첫 번째 k 문자를 reverse 하고 나머지는 내버려둔다.
abcdefg -> 4 문자 "abcd"에서 첫 번째 2 글자 반전 -> "bacd" -> bacdefg
bacdefg -> 2보다 큼 -> bacdfeg
string reverseStr(string s, int k) {
int sindex = 0, eindex = s.size();
while(sindex < s.size()){
int rest = eindex - sindex; //남은 문자열 길이
if(2 * k > rest){ //2k보다 짧음
if(k <= rest){ //k보단 크거나 같은 문자열 -> reverse first k char
reverse(s.begin()+sindex, s.begin()+sindex+k);
break;
}else { //k보다 작은 문자열 -> reverse all of them
reverse(s.begin()+sindex, s.end());
break;
}
}else{ //2k보다 크거나 같음 -> reverse first k char
eindex = sindex + 2 * k - 1;
reverse(s.begin()+sindex, s.begin()+sindex+k);
sindex = eindex + 1; //시작 위치 업데이트
eindex = s.size();
}
}
return s;
}
문제를 읽고 차례대로 순서를 작성해보고 그에 따라 코드를 작성하면 쉽게 구현할 수 있다.
728x90
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode/easy/BinarySearch] First Bad Version (0) | 2022.09.21 |
---|---|
[LeetCode/easy/BinarySearch] Sort(x) (0) | 2022.09.20 |
[LeetCode/easy/TwoPointer] Assign Cookies (0) | 2022.09.20 |
[LeetCode/easy/TwoPointer] Intersection of Two Arrays (0) | 2022.09.20 |
[LeetCode/easy/String] Is Subsequence (0) | 2022.09.20 |