
의역: 문자열 s를 제공할 때 해당 문자열의 segment의 개수를 반환하라
segment는 공백이 존재하지 않는 연속된 문자열이다

의역: 각각 공백을 제거한 문자열 들의 개수를 리턴 한 예제들이다.
조심할 점: 해당 문제는 언뜻 보면 split(' ')을 사용하여 공백을 기준으로 나누면 해결 될 수 있을 것 처럼 보인다.
하지만 함정이 하나 숨어 있는데 문자열 s가 " abc q qf" 처럼 공백이 여러번 들어 간 케이스도 존재한 다는 것 이다.
<풀이>

1번: split() 함수와 정규식 /s == ' '을 이용
/s 에서 만약 +를 붙인다면 공백 문자가 1개 이상인 경우임을 말하기에
// (Java) 공간 복잡도 O(n) 시간 복잡도 O(split())
public int countSegmentsOtimal2(String s) {
// ("x "+s) 를 하는 이유는 맨 앞이 공백으로 오는 경우를 제거 하기 위해
// return ("x "+s).split(" +").length-1; 둘다 가능
return ("x "+s).split("//s+").length-1;
}
# python
class Solution:
def countSegments1(self, s: str) -> int:
return len(s.split())
2번: split() 함수는 시간을 많이 소모하기에 1번에 비해 좀 더 빠른 방법이다.
논리적으로 공백 다음에 공백이 아니라면 단어라고 판단하여 segment +1
+만약 "a b" 처럼 처음에 공백 없이 단어가 존재하는 경우는 (i==0)|| 조건을 추가로 붙여 해결
// (Java) 공간 복잡도 O(1) 시간 복잡도 O(n)
public int countSegmentsOtimal1(String s) {
int ans =0;
for(int i=0;i<s.length();i++){
if((i==0||s.charAt(i-1)==' ')&&s.charAt(i)!=' ')
ans++;
}
return ans;
}
# python
class Solution:
def countSegments(self, s):
segment_count = 0
for i in range(len(s)):
if (i == 0 or s[i-1] == ' ') and s[i] != ' ':
segment_count += 1
return segment_count
링크: https://leetcode.com/problems/number-of-segments-in-a-string/description/
'PS > Easy' 카테고리의 다른 글
| 520. Detect Capital (해석 + 풀이) (1) | 2023.01.03 |
|---|---|
| 441. Arranging Coins (해석 + 풀이) (0) | 2023.01.02 |
| 414. Third Maximum Number (해석) (0) | 2022.12.30 |
| 412. Fizz Buzz (해석) (0) | 2022.12.29 |
| 2389. Longest Subsequence With Limited Sum (해석) (0) | 2022.12.25 |