📖 Scenario: Imagine you are building a simple text search tool that helps users find specific words inside a paragraph. This tool will look for a smaller piece of text (called a substring) inside a bigger text.
🎯 Goal: You will create a program that searches for a given substring inside a larger string and shows all the starting positions where the substring appears.
📋 What You'll Learn
Create a string variable with a fixed paragraph of text.
Create a string variable for the substring to search.
Use a loop to find all starting indexes where the substring appears in the paragraph.
Print the list of all starting indexes found.
💡 Why This Matters
🌍 Real World
Searching for keywords inside documents, logs, or messages is common in text editors, search engines, and data analysis tools.
💼 Career
Understanding substring search is fundamental for roles in software development, data processing, and building search features.
Progress0 / 4 steps
1
Create the paragraph string
Create a string variable called paragraph and set it to the exact value "Go is an open source programming language."
DSA Go
Hint
Use := to create and assign the string variable paragraph.
2
Create the substring to search
Add a string variable called search and set it to the exact value "go"
DSA Go
Hint
Remember to use := to create the variable search.
3
Find all starting indexes of the substring
Write a for loop with variable i from 0 to len(paragraph) - len(search). Inside the loop, use paragraph[i:i+len(search)] == search to check if the substring matches. If it matches, append i to a slice called positions. Initialize positions as an empty slice of integers before the loop.
DSA Go
Hint
Remember to create positions as an empty slice before the loop. Use append to add indexes.
4
Print the list of starting indexes
Use fmt.Println(positions) to print the slice positions.
DSA Go
Hint
Use fmt.Println(positions) to show the result.
Practice
(1/5)
1. What does the strings.Contains(s, substr) function in Go do?
easy
A. Returns the index of substr in s
B. Checks if substr is present anywhere in s
C. Splits s by substr
D. Replaces substr with another string in s
Solution
Step 1: Understand the function purpose
strings.Contains checks if one string is inside another.
Step 2: Check the return type
It returns true if substr is found anywhere in s, otherwise false.
Final Answer:
Checks if substr is present anywhere in s -> Option B
Quick Check:
Contains means presence check = A [OK]
Hint: Contains means checking presence, not position or replacement [OK]
Common Mistakes:
Confusing Contains with Index or Replace functions
Thinking it returns position instead of boolean
Assuming it modifies the original string
2. Which of the following is the correct syntax to find the index of substring "go" in string s using Go's standard library?
easy
A. index := strings.Index(s, "go")
B. index := s.IndexOf("go")
C. index := s.find("go")
D. index := strings.Find(s, "go")
Solution
Step 1: Recall Go's strings package functions
The correct function to find substring index is strings.Index.
Step 2: Check syntax correctness
The function is called as strings.Index(s, "go"), returning the first index or -1 if not found.
Final Answer:
index := strings.Index(s, "go") -> Option A
Quick Check:
Index function in strings package = B [OK]
Hint: Use strings.Index for substring position in Go [OK]
Common Mistakes:
Using methods on string variable directly (strings are not objects)
Using Python or JavaScript syntax like find or IndexOf
Calling non-existent functions like strings.Find
3. What will be the output of the following Go code?
package main
import (
"fmt"
"strings"
)
func main() {
s := "hello golang"
pos := strings.Index(s, "go")
fmt.Println(pos)
}
medium
A. 6
B. -1
C. 0
D. Error
Solution
Step 1: Understand strings.Index behavior
It returns the first index where substring "go" appears in "hello golang".
Step 2: Find substring position
Counting from 0: h(0) e(1) l(2) l(3) o(4) ' '(5) g(6) o(7)... So "go" starts at index 6.
Final Answer:
6 -> Option A
Quick Check:
Index of "go" in "hello golang" = 6 [OK]
Hint: Count characters from zero to find substring index [OK]
Common Mistakes:
Counting from 1 instead of 0
Assuming substring not found returns 0
Confusing Index with Contains boolean
4. Identify the error in the following Go code snippet for substring search:
package main
import (
"fmt"
"strings"
)
func main() {
s := "golang"
if s.Contains("go") {
fmt.Println("Found")
}
}
medium
A. Incorrect string literal syntax
B. Missing import for fmt package
C. No error, code runs fine
D. strings package has no Contains method on string variable
Solution
Step 1: Check method call on string variable
In Go, strings are not objects and do not have methods like Contains directly.
Step 2: Correct usage of Contains function
The correct call is strings.Contains(s, "go") from the strings package, not s.Contains("go").
Final Answer:
strings package has no Contains method on string variable -> Option D
Quick Check:
Use strings.Contains(s, substr), not s.Contains(substr) [OK]
Hint: Call Contains from strings package, not on string variable [OK]
Common Mistakes:
Calling methods on string variables as if they were objects
Forgetting to import strings package
Assuming Contains returns index
5. Given a list of strings words := []string{"go", "golang", "gopher", "gone"}, which code snippet correctly finds all words containing substring "go" and stores them in result?
hard
A. result := []string{}
for _, w := range words {
if strings.Index(w, "go") > 5 {
result = append(result, w)
}
}
B. var result []string
for i := 0; i < len(words); i++ {
if words[i].Contains("go") {
result = append(result, words[i])
}
}
C. var result []string
for _, w := range words {
if strings.Contains(w, "go") {
result = append(result, w)
}
}
D. result := []string{}
for _, w := range words {
if strings.Index(w, "go") == -1 {
result = append(result, w)
}
}
Solution
Step 1: Identify correct substring check
Use strings.Contains(w, "go") to check if substring exists.
Step 2: Append matching words to result slice
For each word containing "go", append it to result slice.
Final Answer:
var result []string
for _, w := range words {
if strings.Contains(w, "go") {
result = append(result, w)
}
} -> Option C
Quick Check:
Contains + append in loop = D [OK]
Hint: Use strings.Contains inside loop and append matches [OK]
Common Mistakes:
Calling Contains as method on string variable
Appending words that do NOT contain substring
Checking Index == -1 instead of != -1
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.