LeetCode——比较含退格的字符串&&二分查找

目录

一.比较含退格的字符串

题目描述:

代码实现: 

解题思路:

二.二分查找

题目描述:

方法一

 代码实现:

解题思路:

方法二

代码实现:

解题思路:


一.比较含退格的字符串

题目描述:

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。

示例 3:

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

提示:

  • 1 <= s.length, t.length <= 200
  • s 和 t 只含有小写字母以及字符 '#'

代码实现: 

bool backspaceCompare(char* s, char* t) {
    int len1=strlen(s),len2=strlen(t);
    int x=0,y=0;
    for(int i=0;i<len1;i++)
    {
        if(s[i]!='#')
        {
            s[x]=s[i];
            x++;
        }
        else
        {
            if(x>0)
            {
                x--;
            }
        }
    }
    s[x]='\0';
    for(int j=0;j<len2;j++)
    {
        if(t[j]!='#')
        {
            t[y]=t[j];
            y++;
        }
        else
        {
            if(y>0)
            {
                y--;
            }
        }
    }
    t[y]='\0';
    return strcmp(s,t)==0;
}

解题思路:

1.首先计算出两条字符串的长的len1,len2作为跳出循环的条件。

2.创建整形变量x,并赋值为零,在循环中判断当前字符是否为#,若是则令x--,当然,此时的x必须满足大于0的条件,因为x是新的字符串的当前下标,判断当前字符不为#时就将当前字符赋值给下标为x的位置,并将x++。出循环后给x的当前位置赋值为'\0',表示字符串结束。

3.对于第二个字符串的处理方法与上面的相同。

4.返回字符串s,t判断是否相同的语句。

二.二分查找

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

方法一

 代码实现:

int search(int* nums, int numsSize, int target) {
    //int x=0;
    for(int i=0;i<numsSize;i++)
    {
        if(target==nums[i])
        {
            return i;
        }
    }
    return -1;
}

解题思路:

从数组中第一个元素开始逐个判断,若与目标值相等则直接返回当前元素的数组下标,当数组循环完毕跳出循环时,说明数组中无目标元素,返回-1.

方法二

代码实现:

int search(int* nums, int numsSize, int target) {
    int left=0,right=numsSize-1;
    while(left<=right)
    {
        int mid=(right+left)/2;
        if(nums[mid]==target)
        {
            return mid;
        }
        else if(nums[mid]<target)
        {
            left=mid+1;
        }
        else
        {
            right=mid-1;
        }
    }
    return -1;
}

解题思路:

主要方法:二分查找法

首先设置数组最左边元素下标为left,最右边下标元素为right,当最左边下标小于等于最右边下标时进入循环,找出当前left和right的中间值mid,判断数组下标为mid的元素与目标元素是否相等,相等则返回mid,小于则将mid+1赋值给left,改变查找范围的左边界,大于则将mid-1的值赋值给right,改变查找的右边界,继续进行查找。

若未查找到目标元素则返回-1.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值