【LittleDuck_LeetcodeNote】28 - Find the Index of the First...

更新於 2023/07/10閱讀時間約 7 分鐘

【Instagram】 / 【巴哈姆特小屋】 / 【Vocus方格子】 / 【Medium】
喜歡的話就按個愛心或贊助ㄅ。


A realistic, brightly colored interior home-style drawing in blue tones of a software engineer. - Leonardo.ai

A realistic, brightly colored interior home-style drawing in blue tones of a software engineer. - Leonardo.ai

Question and Hints

Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "sadbutsad", needle = "sad"
Output: 0
Explanation: "sad" occurs at index 0 and 6.
The first occurrence is at index 0, so we return 0.

Example 2:

Input: haystack = "leetcode", needle = "leeto"
Output: -1
Explanation: "leeto" did not occur in "leetcode", so we return -1.

Constraints:

  • 1 <= haystack.length, needle.length <= 104
  • haystack and needle consist of only lowercase English characters.

First Solution

💡 如果needle比haystack長,就不用看了,一定找不到。

這邊的思路是以 i 作為索引,一個一個去和needle的第一個字元做比對,
相同就用 j 作為索引,確認後續的字元有沒有一樣,
如果都有,就回傳 i 的位置,
如果有一個字不同,就回到 i 的位置繼續往下找。
class Solution {
public int strStr(String haystack, String needle) {
int i=0;

if(needle.length() > haystack.length())
return -1;

while(i < haystack.length()){
if(haystack.charAt(i) == needle.charAt(0)){
int j=0;
for(; j < needle.length(); j++){
if(i+j >= haystack.length())
return -1;
if(haystack.charAt(i+j) != needle.charAt(j))
break;
}
if(j == needle.length())
return i;
}
i++;
}
return -1;
}
}

⏰ Runtime: 1 ms (39.21 %)

📦 Memory: 40.2 MB (94.80 %)



Upgrade Solution

💡 思路是相同的,不過這個作法只用了一個for loop,所以可以更快。
  • 一樣用 i 去做搜尋的索引,
    差別在遇到和needle相同的字元後,
    原本First Solution的做法是先用 j (nLen) 檢查後面的字元是否都一樣,
    而這邊的作法是讓 i 和 nLen同時前進,
    如果不一樣,i 就退一格繼續搜尋。
  • 原本是想說 i 要固定,
    這樣找到和needle相同的部分時才可以找到開頭的索引,
    但如果 i 真的找到needle的最後一個字元,
    那這時讓 i 往後退 nLen格,
    其實就可以找到開頭的索引了。
  • 如果照原本的做法,i 是會重複走到 j 的搜尋過程的,
    因此這個做法可以少走一些冤枉路,比較簡潔,
    而且不用設定例外情況,
    是個相當聰明的寫法。
class Solution {
public int strStr(String haystack, String needle) {
int hLen = haystack.length();
int nLen = needle.length();
int nIndex = 0;
for(int i=0; i<hLen; i++){
// as long as the characters are equal, increment needleIndex
if(haystack.charAt(i)==needle.charAt(nIndex)){
nIndex++;
}
else{
// start from the next index of previous start index
i=i-nIndex;
// needle should start from index 0
nIndex=0;
}
// check if needleIndex reached needle length
if(nIndex==nLen){
// return the first index
return i-nLen+1;
}
}
return -1;
}
}

⏰ Runtime: 0 ms (100 %)

📦 Memory: 40.8 MB (19.94 %)

avatar-img
6會員
36內容數
以英文和日文歌的翻譯為主,並從「歌曲裡的故事」這個角度去翻譯。畢竟自己只有中文算好而已 :D
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Steven SHIH的沙龍 的其他內容
Remove Element : 在陣列中刪除val後,回傳剩餘的元素個數。
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
Remove Element : 在陣列中刪除val後,回傳剩餘的元素個數。
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Linux FAQ : find 用法 find 目錄 參數 條件 參考 : https://blog.gtwang.org/linux/unix-linux-find-command-examples/ https://stackoverflow.com/questions/4210042/how
在來美國將滿一個月的時候,Matthew 問我這個問題,當時我還想天氣還不冷,問我手套幹嘛呢?(笑爛)。下禮拜我來美國就要滿兩個月了,不知為何感覺日子過得特別慢,大概是因為一直期望領薪水或回台灣。這邊的生活沒什麼不好,道路總是綠意盎然,只是交通不便,沒有朋友也沒帥哥,去亞超變成生活唯一的樂趣。在這小
Thumbnail
當你一遍遍反覆的聆聽,中島美嘉柔和中帶著堅定的能量,彷彿在告訴你,只要你不放棄,就算輸了人生的局,你依然可以守護自己的心。你一直仰望的那道微光,嚮往的方向,就是心所閃耀的光芒,它終將指引你,為你而閃爍,為你點亮通往光明的路途。
Writing this article to share my experience finding apartments (or condos as Thai calls it) in Bangkok when I first moved to Thailand. Scroll down for
Thumbnail
I tried to find love, intimates, fullness, and ease in  LIFE, but I only found losses, impossibilities, failures, and excuses. 我試著在「生命」裡找愛、知己、完整和舒適,但我
Thumbnail
最近發生了一件在別人看來只是微不足道的小事,卻感動了近日因每日工作內心而變得逐漸麻木的我。 昨天晚上,我如常綁好鞋帶,出門跑步去。怎料一踏出家門口,就感覺到不對勁,一陣熱風迎面吹來,估計室外溫度接近三十度,還沒開始跑已經開始流汗。本來想打退堂鼓,但心想都已經出門口了,不至於吧! 於是咬緊牙關,大步跑
In recent times, it looks as if there are as many different types of desks as there are people in the earth (okay, perhaps not that many, but there a
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Linux FAQ : find 用法 find 目錄 參數 條件 參考 : https://blog.gtwang.org/linux/unix-linux-find-command-examples/ https://stackoverflow.com/questions/4210042/how
在來美國將滿一個月的時候,Matthew 問我這個問題,當時我還想天氣還不冷,問我手套幹嘛呢?(笑爛)。下禮拜我來美國就要滿兩個月了,不知為何感覺日子過得特別慢,大概是因為一直期望領薪水或回台灣。這邊的生活沒什麼不好,道路總是綠意盎然,只是交通不便,沒有朋友也沒帥哥,去亞超變成生活唯一的樂趣。在這小
Thumbnail
當你一遍遍反覆的聆聽,中島美嘉柔和中帶著堅定的能量,彷彿在告訴你,只要你不放棄,就算輸了人生的局,你依然可以守護自己的心。你一直仰望的那道微光,嚮往的方向,就是心所閃耀的光芒,它終將指引你,為你而閃爍,為你點亮通往光明的路途。
Writing this article to share my experience finding apartments (or condos as Thai calls it) in Bangkok when I first moved to Thailand. Scroll down for
Thumbnail
I tried to find love, intimates, fullness, and ease in  LIFE, but I only found losses, impossibilities, failures, and excuses. 我試著在「生命」裡找愛、知己、完整和舒適,但我
Thumbnail
最近發生了一件在別人看來只是微不足道的小事,卻感動了近日因每日工作內心而變得逐漸麻木的我。 昨天晚上,我如常綁好鞋帶,出門跑步去。怎料一踏出家門口,就感覺到不對勁,一陣熱風迎面吹來,估計室外溫度接近三十度,還沒開始跑已經開始流汗。本來想打退堂鼓,但心想都已經出門口了,不至於吧! 於是咬緊牙關,大步跑
In recent times, it looks as if there are as many different types of desks as there are people in the earth (okay, perhaps not that many, but there a