fan4w
fan4w
发布于 2023-04-01 / 53 阅读 / 0 评论 / 0 点赞

LeetCode每日一题: 831. 隐藏个人信息

题目链接: 831. 隐藏个人信息 - 力扣(Leetcode)

题目描述: 太长了,点链接看吧还是(

看到这道题的第一反应是不难,没有涉及到复杂的算法,基本只是考察码代码的能力,先贴上我写的代码

class Solution {
private:
    bool isdigit(char c){
        return c>='0'&&c<='9';
    }
    bool findAt(string &s){
        for(auto it=s.begin();it!=s.end();it++){
            if(*it=='@') return true;
        }
        return false;
    }
    string maskPhoneNumber(string& s){
        int nums=0;
        string res;
        for(auto it=s.begin();it!=s.end();it++){
            if(isdigit(*it)){
                nums++;
            }
        }
        if(nums!=10){
            res.push_back('+');
            for(int i=0;i<nums-10;i++){
                res.push_back('*');
            }
            res.push_back('-');
        }
        res+="***-***-";
        for(int i=0;i<s.length();i++){
            if(isdigit(s.at(i))){
                if(nums<=4){
                    res.push_back(s.at(i));
                }
                else{
                    nums--;
                }
            }
        }
        return res;
    }
    string maskEmail(string& s){
        transform(s.begin(),s.end(),s.begin(),::tolower);
        string res;
        res.push_back(s.at(0));
        res+="*****";
        int i=1;
        for(;i<s.length();i++){
            if(s.at(i+1)=='@'){
                res.push_back(s.at(i));
                break;
            }
        }
        res+=s.substr(i+1,s.length()-1);

        return res;
    }
public:
    string maskPII(string s) {
        string res;
        if(!findAt(s)){
            return maskPhoneNumber(s);
        }
        else{
            return maskEmail(s);
        }
        return {};
    }
};

重写了isdigit函数和find函数,是因为对C++尤其是STL的掌握还不熟悉,所以自己写了一个更便于理解的函数。一共提交了三次,第一次是越界问题,说明对string类的掌握还不太好,第二次是解答错误,后来定位问题是判断字符是邮箱还是电话号码时出错。总之从此题看的出来,对基础语法,语法结构,模板库的使用有很大欠缺。

然后在贴一个官方的题解

class Solution {
public:
    vector<string> country = {"", "+*-", "+**-", "+***-"};

    string maskPII(string s) {
        string res;
        int at = s.find("@");
        if (at != string::npos) {
            transform(s.begin(), s.end(), s.begin(), ::tolower);
            return s.substr(0, 1) + "*****" + s.substr(at - 1);
        }
        s = regex_replace(s, regex("[^0-9]"), "");
        return country[s.size() - 10] + "***-***-" + s.substr(s.size() - 4);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/masking-personal-information/solutions/2200759/yin-cang-ge-ren-xin-xi-by-leetcode-solut-2enf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

很喜欢评论区的一段话: 看了题解感觉自己可以去麦当劳看大门了T_T