1. 程式人生 > >【每日leetcode】實現strStr()

【每日leetcode】實現strStr()

實現 strStr() 函式。 給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則返回 -1。 示例 1: 輸入: haystack = “hello”, needle = “ll” 輸出: 2 示例 2: 輸入: haystack = “aaaaa”, needle = “bba” 輸出: -1 說明: 當 needle 是空字串時,我們應當返回什麼值呢?這是一個在面試中很好的問題。 對於本題而言,當 needle 是空字串時我們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。 方法一:

class Solution {
public:
    int strStr(string haystack, string needle) {    
        if(needle.empty())
            return 0;
        if(haystack.length()<needle.length())
            return -1;
        int flag=1,p;
        for(int i=0;i<haystack.length()-needle.length()+1;i++)
        {
            p=
i; for(int j=0;j<needle.length();j++) { if(haystack[p++]!=needle[j])//不匹配 { flag=0; break; } flag=1;//匹配 } if(flag==1) return i; }
return -1; } };

方法二:利用substr,獲得指定長度指定位置的子串

class Solution {
public:
    int strStr(string haystack, string needle) {    
      if(needle == "") 
          return 0;        
      if(haystack.size() < needle.size())
            return -1;      
       int p;       
       for(int i = 0;i < haystack.size()-needle.size()+1;++i)
       {       
            if(haystack.substr(i,needle.size()) == needle)              
                return i;       
        }      
        return -1; 
    }
};

知識補充: 做了這道題才知道c++還有strstr這個函式,用來查詢字串第一次出現的位置,返回的是指標。 原型:

    const char * strstr ( const char * str1, const char * str2 );
         		char * strstr (       char * str1, const char * str2 );

用法:

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char *s="1234abcd";
	char *sb1="34a"; 
	int p;
	p=strstr(s,sb1)-s;
	cout<<p;
	return 0;
}

輸出2