天天看點

leetcode算法28.實作strStr()

哈喽!大家好,我是【學無止境小奇】,一位熱愛分享各種技術的部落客!

⭐【學無止境小奇】的創作宗旨:每一條指令都親自執行過,每一行代碼都實際運作過,每一種方法都真實實踐過,每一篇文章都良心制作過。✊✊✊

⭐【學無止境小奇】的部落格中所有涉及指令、代碼的地方,除了提供圖檔供大家參考,另外會在圖檔下方提供一份純文字格式的指令或者代碼友善大家粘貼複制直接執行指令或者運作代碼。

⭐如果你對技術有着濃厚的興趣,歡迎關注【學無止境小奇】,歡迎大家和我一起交流。

❤️❤️❤️感謝各位朋友接下來的閱讀❤️❤️❤️

文章目錄

  • ​​一、leetcode算法​​
  • ​​ 1、實作strStr()​​
  • ​​1.1、題目​​
  • ​​1.2、思路​​
  • ​​1.3、答案​​

一、leetcode算法

1、實作strStr()

1.1、題目

實作 strStr() 函數。

給你兩個字元串 haystack 和 needle ,請你在 haystack 字元串中找出 needle 字元串出現的第一個位置(下标從 0 開始)。如果不存在,則傳回 -1 。

說明:

當 needle 是空字元串時,我們應當傳回什麼值呢?這是一個在面試中很好的問題。

對于本題而言,當 needle 是空字元串時我們應當傳回 0 。這與 C 語言的 strstr() 以及 Java 的 indexOf() 定義相符。

示例 1:

輸入:haystack = “hello”, needle = “ll”

輸出:2

1.2、思路

思路一:本題關鍵點在于臨界點的判斷,循環的次數為長的字元串長度減去短的字元串長度,因為如果長的字元串剩餘要判斷的字元串長度小于短的字元串長度的話就不需要再接着判斷了。

1.3、答案

class Solution {
    public int strStr(String haystack, String needle) {
        int n = haystack.length(), m = needle.length();
        for(int i = 0; i + m <= n; i++){
            boolean flag = true;
            for(int j = 0; j < m; j++){
                if(haystack.charAt(i + j) != needle.charAt(j)){
                    flag = false;
                    break;
                }
            }
            if(flag){
                return i;
            }
        }
        return -1;
    }
}