Day02——T1750删除字符串两端相同字符后的最短长度、T231 2的幂

Leetcode

day02

T1750. 删除字符串两端相同字符后的最短长度

给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。前缀和后缀在字符串中任意位置都不能有交集。前缀和后缀包含的所有字符都要相同。同时删除前缀和后缀。请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。

int minimumLength(char * s){
    int pre = 0, rear = strlen(s)-1;
    if(pre == rear) {
          return 1;
    }
    while(pre<rear && s[pre]==s[rear]) {
        //左边相同
        while(pre<rear && s[pre]==s[pre+1]) {
            pre++;
        }
        //右边相同
        while(pre<rear && s[rear]==s[rear-1]) {
            rear--;
        }
            pre++;
            rear--;
    }
    if(pre>rear){
        return 0;
    }else {
        return (rear-pre+1);
    }
}

学习感悟

  • 字符串常量的本质是一个地址,char*s存入的是字符串的首地址

  • 前后缀通过双指针pre 、rear实现对比分别向前向后递进

  • length = 1                          输出1
    length > 1 && 所有前后缀对应相同       输出0
    length > 1 && 存在前后缀对应相同       输出中间部分
    length > 1 && 没有前后缀对应相同       输出全部
    
T231.2的幂

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

  • 递归法

    return function(n/2)

    bool isPowerOfTwo(int n){
        if(n==1)  return true;//2的x次幂递归到最后都为2,整除为1
        if(n<1)   return false;
        if(n%2==1)  return false;//保证因数含有奇数不会进入递归
        return isPowerOfTwo(n/2);
    }
    
  • 位运算

    • n&(n-1)==0,二进制运算,2的幂的二进制都为1000000000

    • n>0

      bool isPowerOfTwo(int n){
          return (n > 0) && (n & (n-1))==0;
      }
      

学习感悟

  • 每个函数对应一个return值,一旦有一个return返回值,即退出递归

  • 若 n = 2^x,恒有 n & (n - 1) == 0

    • n二进制最高位为 1,其余所有位为 0;
    • n - 1二进制最高位为 0,其余所有位为 1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值