一.找出字符串中第一个匹配的下标
题目描述:
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
示例 1:
输入:haystack = "sadbutsad", needle = "sad" 输出:0 解释:"sad" 在下标 0 和 6 处匹配。 第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = "leetcode", needle = "leeto" 输出:-1 解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
提示:
1 <= haystack.length, needle.length <= 104
haystack
和needle
仅由小写英文字符组成
代码实现:
int strStr(char* haystack, char* needle) {
int len2=strlen(needle),len1=strlen(haystack);
for(int i=0;i+len2<=len1;i++)
{
bool flag=true;
for(int j=0;j<len2;j++)
{
if(haystack[i+j]!=needle[j])
{
flag=false;
break;
}
}
if(flag)
{
return i;
}
}
return -1;
}
解题思路:
这道题我采用了暴力枚举的方法,将needle字符串与haystack字符串中的每个子字符串进行比较(从haystack字符串的第一个字符开始进行比较)。第一个循环的条件是当haystack字符串当前位置的字符下标加上needle字符串的长度len2小于haystack字符串的长度时。第二个循环是判断haystack的每个子字符串与needle是否相等,若有一个字符不相等便退出循环,并令flag等于false,每次当第二个循环结束时就判断一次flag,若为true,则直接返回此时haystack的下标i。
二.搜索插入位置
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的 升序 排列数组-104 <= target <= 104
代码实现:
int searchInsert(int* nums, int numsSize, int target) {
if(nums[numsSize-1]<target)
{
return numsSize;
}
for(int i=0;i<numsSize;i++)
{
if(nums[i]==target)
{
return i;
}
else if(target>nums[i]&&target<nums[i+1])
{
return i+1;
}
}
return 0;
}
解题思路:
在循环次数为numsSize中的循环中,首先判断数组当先位置数据与目标数据target是否相等,相等则返回当前数据的下标,不相等则判断是否大于当前数据并小于下一个数据,是则返回当前数据下标加一,为防止目标值大于数组中最大元素而导致数组越界,所以循环开始时对target进行特判。