Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[LeetCode] 1750. Minimum Length of String After Deleting Similar Ends 본문
PS/LeetCode
[LeetCode] 1750. Minimum Length of String After Deleting Similar Ends
riveroverflow 2024. 3. 5. 09:49728x90
반응형
https://leetcode.com/problems/minimum-length-of-string-after-deleting-similar-ends/description/
Leetcode - Minimum Length of String After Deleting Similar Ends
문제 유형 : 문자열 처리, 투 포인터
문제 난이도 : Medium
문제
Given a string s consisting only of characters 'a', 'b', and 'c'. You are asked to apply the following algorithm on the string any number of times:
- Pick a non-empty prefix from the string s where all the characters in the prefix are equal.
- Pick a non-empty suffix from the string s where all the characters in this suffix are equal.
- The prefix and the suffix should not intersect at any index.
- The characters from the prefix and suffix must be the same.
- Delete both the prefix and the suffix.
Return the minimum length of s after performing the above operation any number of times (possibly zero times).
문자열 s의 문자는 a, b, c만 있습니다. 아래의 알고리즘을 몇 번이고 사용할 수 있습니다:
- 문자가 모두 같은 접두사를 고를 수 있습니다.
- 문자가 모두 같은 접미사를 고를 수 있습니다.
- 접두사와 접미사는 교차할 수 없습니다.
- 접두사와 접미사의 문자는 같아야합니다.
- 양쪽 접두사와 접미사를 지웁니다.
문자열 s가 알고리즘을 사용하여 얻을 수 있는 최소 길이를 구하시오.
풀이
투 포인터를 이용해서 left = 0과 right = n-1인덱스부터 시작한다. left < right인동안 실행한다.
우선, s[left]와 s[right]이 서로 다르면 반복문을 바로 종료한다.
그게 아니라면, left와 right이 서로 교차하지 않는 선에서 접두사와 접미사를 각각 확장시킨다.
이렇게 left와 right의 사이를 최대한 좁히고, right - left + 1을 반환하면 최소 문자열의 길이가 나온다.
코드
C++
#pragma GCC optimize("03", "unroll-loops");
static const int __ = [](){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
return 0;
}();
class Solution {
public:
int minimumLength(string s) {
const int n = s.size();
int left = 0;
int right = n-1;
while(left < right) {
if(s[left] != s[right]) break;
auto ch = s[left];
while(left+1 < right && s[left+1] == ch) {
left++;
}
while(left < right-1 && s[right-1] == ch) {
right--;
}
left++;
right--;
}
return right-left+1;
}
};
728x90
반응형
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 3005. Count Elements With Maximum Frequency (0) | 2024.03.08 |
---|---|
[LeetCode] 876. Middle of the Linked List (0) | 2024.03.07 |
[LeetCode] 948. Bag of Tokens (0) | 2024.03.04 |
[LeetCode] 19. Remove Nth Node From End of List (0) | 2024.03.03 |
[LeetCode] 977. Squares of a Sorted Array (0) | 2024.03.02 |