LeetCode - Problems - Algorithms - 14. Longest Common Prefix
Problem Description
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
Example 1:
- Input: strs = ["flower","flow","flight"]
- Output: "fl"
Example 2:
- Input: strs = ["dog","racecar","car"]
- Output: ""
- Explanation: There is no common prefix among the input strings.
Constraints:
- 0 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] consists of only lower-case English letters.
My Solution (C#)
public class Solution {
public string LongestCommonPrefix(string[] strs)
{
if (strs.Length == 0)
{
return "";
}
string temp;
for (int i = 0; i < strs[0].Length; i++)
{
temp = strs[0].Substring(i, 1);
for (int j = 1; j < strs.Length; j++)
{
if (strs[j].Length == i || temp != strs[j].Substring(i, 1))
{
return strs[0].Substring(0, i);
}
}
}
return strs[0];
}
}
์ฃผ์ด์ง string array ์์๋ค์ ๊ณตํต ์ ๋์ฌ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
string array๋ฅผ ์ํ ๋ฐ๋ณต๋ฌธ๊ณผ, ๊ฐ ๋จ์ด์ letter๋ค์ ํ์ธํ๊ธฐ ์ํ ๋ฐ๋ณต๋ฌธ ๋ ๊ฐ๊ฐ ํ์ํ๋ค.
๋ณดํต ์ด๋ฐ ๋น๊ต๋ฅผ ํ๊ฒ ๋๋ฉด array index๋ฅผ ์ํ ๋ฐ๋ณต๋ฌธ ์์ array ์์ ๋ด์ index๋ฅผ ์ํ ๋ฐ๋ณต๋ฌธ์ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด ๊ฒฝ์ฐ์๋ ๋ฐ๋๋ก ํ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๋จํ๊ณ ํธ๋ฆฌํ๋ค.
์ฐ์ ์ strs array์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ if ๋ฌธ์ ์ด์ฉํด ๊ฐ์ฅ ๋จผ์ ๊ฑธ๋ฌ์ค๋ค.
์ดํ ๋น๊ต๋ฅผ ์ํ ์์ string ๊ฐ, temp๋ฅผ ๋ง๋ค์ด์ฃผ์๊ณ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์์ํ๋ค.
๋ชจ๋ array ์์์ ๊ณตํต ์ ๋์ฌ๋ฅผ ์ฐพ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ ์ผ ์ฒซ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก letter๋ฅผ ์ฐธ๊ณ ํ for ๋ฐ๋ณต๋ฌธ์ ๋ง๋ค์๋ค. ์ด ๋ temp์ ๋น๊ตํ ๋ฌธ์๋ฅผ ๋์ ํ๋ค.
๊ทธ ์์ strs array์ ๋ชจ๋ ์์๋ฅผ ํ์ธ ํ๋ ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ๋ง๋ค์ด์ค๋ค.
(strs array์ ์ฒซ๋ฒ์งธ ์์์ letter๋ ์ด๋ฏธ temp์ ๋์ ํ์ผ๋ฏ๋ก index ๊ฐ์ธ j๋ 1๋ถํฐ ์์ํ๋ค.)
์ธ๋ถ ๋ฐ๋ณต๋ฌธ์ i๊ฐ (๋น๊ต letter์ index ๊ฐ)์ ์ด์ฉํด ๋ชจ๋ ์์๋ค์ i ์์น์ ํด๋นํ๋ letter๋ค์ ๋น๊ตํด์ค๋ค.
๋น๊ตํ๊ธฐ ์ ์ ์ฃผ์ํด์ผํ ์ : ์ฐ๋ฆฌ๋ strs์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋น๊ตํ๊ณ ์๋ค.
๋ค๋ฅธ ์์๋ค์ ๊ธธ์ด๊ฐ strs[0]๋ณด๋ค ์งง์ ๊ฒฝ์ฐ, ArgumentOutOfRangeException์ด ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ letter๋ฅผ ๋น๊ตํ๊ธฐ ์ ์ ๋น๊ตํ ๋จ์ด์ ๊ธธ์ด๊ฐ i์ ๊ฐ์์ง ํ์ธ์ ๋จผ์ ํด์ค์ผํ๋ค.
|| (or) ์ฐ์ฐ์์ ๊ฒฝ์ฐ ์ผ์ชฝ ๊ฐ์ด True์ผ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ๊ฐ์ ์ฒดํฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ผ์ชฝ์ strs[j].Length == i๋ฅผ ์์ฑํด์ผํ๋ค.
์ด์ค ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ if ๋ฌธ์์ ๊ฐ์ฅ ์งง์ ๊ธธ์ด์ ๋จ์ด์ letter ๊ฐฏ์๋งํผ ํ์ธ์ด ๋๋ฌ๊ฑฐ๋, ํน์ ๊ฐ์ index ๊ฐ์ letter ๊ฐ๋ค์ด ๋ค๋ฅธ ๊ฒ์ด ํ์ธ๋ ๊ฒฝ์ฐ strs[0]์ 0๋ถํฐ i๊น์ง์ ๊ฐ์ Substring์ ์ด์ฉํด return ํ๋ค.
์ด์ค ๋ฐ๋ณต๋ฌธ์ด ๋๋ ๋๊น์ง ์๋ฌด๋ฐ ๊ฐ์ด return ๋์ง ์์ ๊ฒฝ์ฐ, strs array์ ์ฒซ๋ฒ์งธ ์์๊ฐ ๊ฐ์ฅ ์งง์ ๋จ์ด์ธ ๊ฒ์ด๊ณ , ๊ทธ ์ธ์ ๋ชจ๋ ์์๋ค์ด ์ฒซ๋ฒ์งธ ๋จ์ด๋ฅผ ์ ๋์ฌ๋ก์ ํฌํจํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ทธ๋๋ก return ํ๋ฉด ๋๋ค.
'Problem solving > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 21. Merge Two Sorted Lists (C#) (0) | 2021.01.29 |
---|---|
[LeetCode] 20. Valid Parentheses (C#) (0) | 2021.01.26 |
[LeetCode] 13. Roman to Integer (C#) (0) | 2021.01.24 |
[LeetCode] 9. Palindrome Number (C#) (0) | 2021.01.23 |
[LeetCode] 7. Reverse Integer (C#) (0) | 2021.01.23 |