Problem solving/Algorithms

[LeetCode] 14. Longest Common Prefix (C#)

Young_A 2021. 1. 25. 05:53

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 ํ•˜๋ฉด ๋œ๋‹ค.

 

LeetCode - 14. Longest Common Prefix

'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