20210217:力扣第228周周赛(上)

力扣第228周周赛(上)

题目

    1. 生成交替二进制字符串的最少操作数
      在这里插入图片描述
    1. 统计同构子字符串的数目
      在这里插入图片描述

思路与算法

  1. 第一题需要注意不能直接翻译题意,直接翻译的代码存在先入为主定第一个字符为0或者为1的谬误,即第一个字符有可能才是那个需要改变的,因此改变思路统计该字符到底是010101还是101010,取较小的返回即可。
  2. 第二题使用双指针来操作即可,即所谓的滑动窗口,每次移动之后确定当前需要加入res的计数结果,记得要将每次加了res的值整体取模再返回res进行累计,否则会越界。

代码实现

    1. 生成交替二进制字符串的最少操作数
class Solution {
    
    
public:
    int minOperations(string s) {
    
    
        int cnt1 = 0;
        int cnt2 = 0;
        for (int i = 0; i < s.size(); i++) {
    
    
            if( i % 2 == s[i] % 2) {
    
    
                cnt1 ++;
            } 
            if (i % 2 != s[i] % 2) {
    
    
                cnt2++;
            }
        }
        return min(cnt1,cnt2);
    }
};
    1. 统计同构子字符串的数目
class Solution {
    
    
public:
    int countHomogenous(string s) {
    
    
        int res = 0;
        int left = 0, right = 0;

        while (right < s.length()) {
    
    

            if (s[right] != s[left]) {
    
    
                left = right;
            }

            res = (res + right - left + 1)  % 1000000007;    
            right++;     
        }
        return res;
    }
};

写在最后

  1. 年后大家都开始工作了,不用求量,保证可完成性和质量,最后再考虑数量!
  2. 之后的代码尽量使用cpp和java两种语言混杂保证熟练度。

猜你喜欢

转载自blog.csdn.net/qq_36828395/article/details/113839897