{"id":34722,"date":"2024-11-01T09:31:18","date_gmt":"2024-11-01T09:31:18","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34722"},"modified":"2024-11-01T11:26:50","modified_gmt":"2024-11-01T11:26:50","slug":"swift-coding-test-course-string-search","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34722\/","title":{"rendered":"Swift Coding Test Course, String Search"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this post, we will solve a problem of finding a string using Swift. String problems are common in coding tests, and they greatly help in understanding efficient search algorithms and string processing methods. Through this course, we will solidify our foundation in string processing.<\/p>\n<h2>Problem Description<\/h2>\n<p>Here is a string search problem:<\/p>\n<blockquote>\n<p>Given a string <code>haystack<\/code> and <code>needle<\/code>, write a function to find the index of the first occurrence of <code>needle<\/code> in <code>haystack<\/code>. If <code>needle<\/code> does not exist, it should return <code>-1<\/code>.<\/p>\n<\/blockquote>\n<p>Examples:<\/p>\n<ul>\n<li><code>haystack = \"hello\"<\/code>, <code>needle = \"ll\"<\/code> =&gt; Output: <code>2<\/code><\/li>\n<li><code>haystack = \"aaaaa\"<\/code>, <code>needle = \"bba\"<\/code> =&gt; Output: <code>-1<\/code><\/li>\n<li><code>haystack = \"\"<\/code>, <code>needle = \"<\/code> =&gt; Output: <code>0<\/code><\/li>\n<\/ul>\n<h2>Problem Approach<\/h2>\n<p>To solve this problem, we need to compare the strings sequentially to check where <code>needle<\/code> appears in <code>haystack<\/code>. We can follow these steps:<\/p>\n<ol>\n<li>First, check the length of <code>needle<\/code> and compare it with the length of <code>haystack<\/code> to determine if <code>needle<\/code> can exist in <code>haystack<\/code>.<\/li>\n<li>Then, extract substrings of the length of <code>needle<\/code> from each index of <code>haystack<\/code> and compare them.<\/li>\n<li>If the comparison matches, return the index; otherwise, return <code>-1<\/code>.<\/li>\n<\/ol>\n<h2>Swift Code Implementation<\/h2>\n<p>Now, let&#8217;s implement the above logic in Swift:<\/p>\n<pre><code>func strStr(_ haystack: String, _ needle: String) -&gt; Int {\n        let haystackCount = haystack.count\n        let needleCount = needle.count\n\n        \/\/ Return 0 when needle is empty\n        if needleCount == 0 {\n            return 0\n        }\n\n        \/\/ Return -1 if the length of haystack is shorter than needle\n        if haystackCount &lt; needleCount {\n            return -1\n        }\n\n        \/\/ Convert haystack to an array\n        let haystackArray = Array(haystack)\n\n        \/\/ Compare substring with needle at each index\n        for i in 0...(haystackCount - needleCount) {\n            var j = 0\n\n            while j &lt; needleCount &amp;&amp; haystackArray[i + j] == needle[needle.index(needle.startIndex, offsetBy: j)] {\n                j += 1\n            }\n\n            \/\/ If needle is found\n            if j == needleCount {\n                return i\n            }\n        }\n\n        \/\/ If needle is not found\n        return -1\n    }<\/code><\/pre>\n<h2>Code Explanation<\/h2>\n<p>Now let&#8217;s explain the code in detail:<\/p>\n<ul>\n<li><code>func strStr<\/code>: A function that takes two strings <code>haystack<\/code> and <code>needle<\/code> as arguments and performs the string search.<\/li>\n<li><code>let haystackCount = haystack.count<\/code>: Stores the length of <code>haystack<\/code>.<\/li>\n<li><code>let needleCount = needle.count<\/code>: Stores the length of <code>needle<\/code>.<\/li>\n<li><code>if needleCount == 0<\/code>: If <code>needle<\/code> is empty, return 0.<\/li>\n<li><code>if haystackCount &lt; needleCount<\/code>: If the length of <code>haystack<\/code> is shorter than <code>needle<\/code>, return -1 as it cannot be found.<\/li>\n<li><code>let haystackArray = Array(haystack)<\/code>: Converts the string into an array to allow access to each character.<\/li>\n<li><code>for i in 0...(haystackCount - needleCount)<\/code>: Iterates through all indices of <code>haystack<\/code>. The loop should consider the length of <code>needle<\/code> for the search range.<\/li>\n<li>The inner <code>while<\/code> loop compares the substring from <code>needle<\/code> with <code>haystack<\/code> at each index.<\/li>\n<li>If all comparisons match, it returns index <code>i<\/code>.<\/li>\n<li>Finally, it returns -1 if <code>needle<\/code> is not found.<\/li>\n<\/ul>\n<h2>Test Cases<\/h2>\n<p>Let&#8217;s write some test cases to validate this code:<\/p>\n<pre><code>print(strStr(\"hello\", \"ll\"))   \/\/ Output: 2\nprint(strStr(\"aaaaa\", \"bba\"))     \/\/ Output: -1\nprint(strStr(\"\", \"\"))              \/\/ Output: 0\nprint(strStr(\"abcde\", \"abc\"))      \/\/ Output: 0\nprint(strStr(\"abcde\", \"xyz\"))      \/\/ Output: -1<\/code><\/pre>\n<h2>Conclusion<\/h2>\n<p>In this lesson, we learned how to solve a string finding problem using Swift. It&#8217;s important to carefully check the length of the strings, compare substrings, and define the search range to solve the given problem. String-related problems have various variations, so ensure to practice to handle more diverse cases.<\/p>\n<p>In the next lesson, we will cover another type of string problem. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this post, we will solve a problem of finding a string using Swift. String problems are common in coding tests, and they greatly help in understanding efficient search algorithms and string processing methods. Through this course, we will solidify our foundation in string processing. Problem Description Here is a string search problem: Given &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34722\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Swift Coding Test Course, String Search&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[129],"tags":[],"class_list":["post-34722","post","type-post","status-publish","format-standard","hentry","category-swift-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/34722\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this post, we will solve a problem of finding a string using Swift. String problems are common in coding tests, and they greatly help in understanding efficient search algorithms and string processing methods. Through this course, we will solidify our foundation in string processing. Problem Description Here is a string search problem: Given &hellip; \ub354 \ubcf4\uae30 &quot;Swift Coding Test Course, String Search&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34722\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:31:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:26:50+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Swift Coding Test Course, String Search\",\"datePublished\":\"2024-11-01T09:31:18+00:00\",\"dateModified\":\"2024-11-01T11:26:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/\"},\"wordCount\":349,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Swift Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34722\/\",\"name\":\"Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:31:18+00:00\",\"dateModified\":\"2024-11-01T11:26:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34722\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34722\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Swift Coding Test Course, String Search\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/34722\/","og_locale":"ko_KR","og_type":"article","og_title":"Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this post, we will solve a problem of finding a string using Swift. String problems are common in coding tests, and they greatly help in understanding efficient search algorithms and string processing methods. Through this course, we will solidify our foundation in string processing. Problem Description Here is a string search problem: Given &hellip; \ub354 \ubcf4\uae30 \"Swift Coding Test Course, String Search\"","og_url":"https:\/\/atmokpo.com\/w\/34722\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:31:18+00:00","article_modified_time":"2024-11-01T11:26:50+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34722\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34722\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Swift Coding Test Course, String Search","datePublished":"2024-11-01T09:31:18+00:00","dateModified":"2024-11-01T11:26:50+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34722\/"},"wordCount":349,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Swift Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34722\/","url":"https:\/\/atmokpo.com\/w\/34722\/","name":"Swift Coding Test Course, String Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:31:18+00:00","dateModified":"2024-11-01T11:26:50+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34722\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34722\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34722\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Swift Coding Test Course, String Search"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=34722"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34722\/revisions"}],"predecessor-version":[{"id":34723,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34722\/revisions\/34723"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}