【每日leetcode】實現strStr()
阿新 • • 發佈:2018-12-11
實現 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