zoukankan      html  css  js  c++  java
  • 周赛139:5076,5078

    大佬的思路就是厉害,很快就能写出来了:首先求两个字符串长度的最大公约数就是它们共有的最大子串。然后看它是否是这两个字符串的最大公因子,即由这个共有子串循环n次得到。

    class Solution {
    public:
        int gcd(int n, int m){
            if(n==0) 
                return m;
            else 
                return gcd(m%n, n);
        }
        
        bool isMatch(string str1, string str2){
            for(int i=0; i<str1.size(); i++){
                if(str1[i] != str2[i % str2.size()])
                    return false;
            }
            return true;
        }
        
        string gcdOfStrings(string str1, string str2) {
            int n = str1.size();
            int m = str2.size();
            int l = gcd(n,m);
            string str3 = str1.substr(0,l);
            if(isMatch(str1, str3) && isMatch(str2, str3)) return str3;
            else
                return "";
        }
    };

     

    思路:逢2进-1,逢-2进1

    因为vector保存的arr1和arr2,索引小的表示的是高位,索引大的表示的是低位,即 arr1=[1,1,1,1,1] 对应的索引为:[0,1,2,3,4],所以将arr1和arr2反转。

    carry 保存进位,a3为当前位的值。

    class Solution {
    public:
        vector<int> addNegabinary(vector<int>& arr1, vector<int>& arr2) {
            vector<int> arr3;
            reverse(arr1.begin(), arr1.end());
            reverse(arr2.begin(), arr2.end());
    
            int carry = 0;
            int a3 = 0;
            
            for(int i=0; i<max(arr1.size(), arr2.size()) || carry!=0; i++){
                int a1 = i<arr1.size() ? arr1[i] : 0;
                int a2 = i<arr2.size() ? arr2[i] : 0;
                a3 = a1 + a2 + carry;
                carry = a3 / (-2);
                a3 %= (-2);
                if(a3<0){
                    a3 = -a3;
                    ++carry;
                }
                arr3.push_back(a3);    
            }
            
            while(arr3.size()>1 && arr3.back()==0) arr3.pop_back();
            reverse(arr3.begin(), arr3.end());
            return arr3;
        }
    };
  • 相关阅读:
    概率期望训练之五
    概率期望训练之四
    JavaScript Source Map详解
    JSON.parse、JSON.stringify
    Linux cp命令直接覆盖不提示方法
    Service Worker
    HTML5 应用程序缓存
    二分图
    Tarjan
    FFT迭代加深 & NTT 多项式求逆
  • 原文地址:https://www.cnblogs.com/Bella2017/p/10964539.html
Copyright © 2011-2022 走看看