본문 바로가기

Algorithm/String

(138)
(C++) - LeetCode (easy) 1736. Latest Time by Replacing Hidden Digits https://leetcode.com/problems/latest-time-by-replacing-hidden-digits/description/문자열을 다뤄보는 문제였습니다.📕 풀이방법📔 풀이과정각 time의 자리별 ?가 들어올 경우를 따져 적절한 숫자로 치환해줍니다.즉, xx:xx의 형식에서 x에 해당하는 부분의 index를 0,1,3,4일 때 '?'가 input으로 들어오므로 해당 경우를 확인해줍니다.1. time[0]이 '?'인 경우   1-1. 그 다음자리인 time[1]이 '4'이상이면서 ?가 아니라면 :왼편 문자열이 "?4" 또는 "?5" ...이므로 time[0]은 1이어야합니다.   1-2. 이외의 경우에는 :왼편 문자열이 "?0", "?1", "?2", "?3" 이 되므로 time[..
(C++) - LeetCode (easy) 1704. Determine if String Halves Are Alike https://leetcode.com/problems/determine-if-string-halves-are-alike/문자열을 다뤄본 문제였습니다.📕 풀이방법📔 입력 및 초기화1. 모음의 개수를 반환하는 countVowel함수를 구현해줍니다.   1-1. 문자열 s의 원소를 순회하며 소문자로 치환된 결과가 모음인 문자들의 개수를 cnt에 세어 저장한 후 반환합니다.📔 풀이과정s의 길이는 짝수이며 같은 길이면서 모음의 개수가 같아야 하므로 문자열 a, b는 s.size() / 2만큼의 길이를 가지는 하나의 경우만을 가집니다. half size만큼 문자열을 잘라 a, b에 왼편과 오른편을 각각 저장해 줍니다.📔 정답 출력 | 반환countVowel의 결과가 같은지 여부를 반환합니다.📕 Code📔..
(C++) - LeetCode (easy) 1694. Reformat Phone Number https://leetcode.com/problems/reformat-phone-number/description/문자열을 formatting하는 문제였습니다.📕 풀이방법📔 풀이과정1. number에서 '-'와 ' '를 제거한 filter된 number를 반환하는 getFilteredNum을 구현해 지역변수 filteredNum을 선언 후 결과값을 저장해줍니다.2. filteredNum에서 필요한 reformat을 진행한 결과를 반환하는 함수 getReformatNum을 구현해줍니다.  2-1. filteredNum에 대해 for loop를 수행하며 3개씩 끊어만든 문자열 뒤에 '-'를 달아주는데, overflow가 나지 않도록 주의하며 남은 문자열이 4개인 경우에는 3개씩이 아닌 2개씩 끊어 연결한..
(C++) - LeetCode (easy) 1684. Count the Number of Consistent Strings https://leetcode.com/problems/count-the-number-of-consistent-strings/description/문자열 비교 및 찾는 문제였습니다.📕 풀이방법📔 입력 및 초기화허용된 문자로만 이루어져 있는 문자열의 개수 count를 선언 후 0으로 초기화해줍니다.📔 풀이과정words에 대해 for loop를 수행하며 내부 지역변수 isAllowed = 1로 선언해줍니다.1. 각 word의 문자에 대해 for loop를 수행해 비허용된 문자가 있는지 확인해 존재한다면 isAllowed = 0으로 바꿔준 후 break합니다.2. isAllowed라면 count를 1씩 추가해줍니다.📔 정답 출력 | 반환count를 반환합니다.📕 Code📔 C++class Soluti..
(C++) - LeetCode (easy) 1662. Check If Two String Arrays are Equivalent https://leetcode.com/problems/check-if-two-string-arrays-are-equivalent/description/간단한 문자열 문제였습니다.📕 풀이방법📔 입력 및 초기화string w1,w2를 선언해줍니다.📔 풀이과정word1, word2의 원소를 순회하며 w1, w2에 문자열을 붙여줍니다.📔 정답 출력 | 반환w1, w2가 같은지 여부를 반환합니다.📕 Code📔 C++class Solution {public: bool arrayStringsAreEqual(vector& word1, vector& word2) { string w1, w2; for(auto w : word1) w1 += w; for(auto w : ..
(C++) - LeetCode (easy) 1592. Rearrange Spaces Between Words https://leetcode.com/problems/rearrange-spaces-between-words/description/문자열을 다루는 문제였습니다.📕 풀이방법📔 입력 및 초기화1. 전체 공백 개수 totalSpace를 선언 후 text의 공백 개수를 세줍니다.2. text를 공백으로 구분해 split해서 정확히 단어들의 vector를 반환하는 split함수를 구현해 그 결과를 splited에 저장합니다.3. 단어개수 wordCount 선언 후 값을 저장해줍니다.4. 단어개수가 1개라면 필요한 공백은 0이며 단어개수가 2개인 것 부터 단어 사이에 공백을 균등배분 해줘야 합니다. 균등배분할 공백 개수 spaceBetweenWords선언 후 값을 저장합니다.5. 균등 배분 후 남은 공백 개수 ..
(C++) - LeetCode (easy) 1576. Replace All ?'s to Avoid Consecutive Repeating Characters https://leetcode.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/간단 문자열 다루는 문제였습니다.📕 풀이방법📔 풀이과정s의 원소에 대해 loop를 수행합니다.1. 일반 alphabat이면 continue합니다.2. '?'라면 'a'부터 'z'까지 loop를 수행하며 다음을 진행합니다.  2-1. 왼쪽 인접 alphabat이나 오른쪽 인접 alphabat이 같다면 continue합니다.  2-2. 인접 원소 중 겹치지 않는 alphabat을 찾아 s[i]를 교체해줍니다. 📔 정답 출력 | 반환s를 반환합니다.📕 Code📔 C++class Solution {public: string ..
(C++) - LeetCode (easy) 1455. Check If a Word Occurs As a Prefix of Any Word in a Sentence https://leetcode.com/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence/description/ find함수 사용과 split을 구현한 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 📔 풀이과정 1. stringstream을 이용, 구분자를 공백 한 글자로 split함수를 구현해 수행한 결과를 vector s에 저장해줍니다. 2. s에 대해 원소를 순회하며 접두어로 searchWord가 나왔는지 find함수의 결과로 확인합니다. 2-1. 찾지 못했다면 string::npos, 찾았다면 string::size_type(unsigned long long)을 반환하므로 0인지 확인하면 됩니다. 2-2. 찾았다면 i+1을 ..