23.1.16刷力扣

懈怠了欸现在是晚上,写一下今天的力扣
唉果然就是需要去有一个休息的放松的时间每天绷紧果然效率低下

QAQ今天的学习计划的题之前已经完成了
那我写啥QAQ

1813. 句子相似性 III
一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,“Hello World” ,“HELLO” ,“hello world hello world” 都是句子。每个单词都 只 包含大写和小写英文字母。
如果两个句子 sentence1 和 sentence2 ,可以通过往其中一个句子插入一个任意的句子(可以是空句子)而得到另一个句子,那么我们称这两个句子是 相似的 。比方说,sentence1 = “Hello my name is Jane” 且 sentence2 = “Hello Jane” ,我们可以往 sentence2 中 “Hello” 和 “Jane” 之间插入 “my name is” 得到 sentence1 。
给你两个句子 sentence1 和 sentence2 ,如果 sentence1 和 sentence2 是相似的,请你返回 true ,否则返回 false 。

写了好久T~T
一开始的错误思路

class Solution {
public:
    bool areSame(vector<string> sentence1,vector<string> sentence2)
    {
        int index=0,index2=0,cnt=0;
        int n=sentence1.size(),m=sentence2.size();
        vector<int>v;
        if(m==1)
            return sentence2[0]==sentence1[0]||sentence2[0]==sentence1[n-1];
        while(index<n&&index2<m)
        {
            if(sentence1[index]==sentence2[index2])
            {
                v.push_back(1);
                index++;
                index2++;
            }
            else
            {
                v.push_back(0);
                index++;
            }
        }
        if(index2<m)
            return false;
        while(index<n)
        {
            v.push_back(0);
            index++;
        }
        int i=0;
        while(i<v.size())
        {
            while(i<v.size()&&v[i])
                i++;
            if(i<v.size())
                cnt++;
            while(i<v.size()&&!v[i])
                i++;
        }
        cout<<cnt<<endl;
        return cnt<=1;
    }
    vector<string> toStrArr(string a)
    {
        vector<string>res;
        string t="";
        for(char i:a)
        {
            if(i==' ')
            {
                res.push_back(t);
                t=string();
            }
            else
                t+=i;
        }
        if(t!="")
            res.push_back(t);
        return res;
    }
    bool areSentencesSimilar(string sentence1, string sentence2) {
        vector<string>s1,s2;
        s1=toStrArr(sentence1);
        s2=toStrArr(sentence2);
        return s1.size()>s2.size()?areSame(s1,s2):areSame(s2,s1);
    }
};

重新思考
三种情况
中间插入句子
后面插入句子
前方插入句子

class Solution {
public:
    bool areSame(vector<string> sentence1,vector<string> sentence2)
    {
        int n=sentence1.size(),m=sentence2.size();
        if(m==1)
            return sentence2[0]==sentence1[0]||sentence2[0]==sentence1[n-1];
        int r=m-1,l=0,i=n-1,j=0;
        while(i>=0&&r>=0&&sentence2[r]==sentence1[i])
        {
            i--;
            r--;
        }
        while(j<n&&l<m&&sentence2[l]==sentence1[j])
        {
            j++;
            l++;
        }
        return l>r;
    }
    vector<string> toStrArr(string a)
    {
        vector<string>res;
        string t="";
        for(char i:a)
        {
            if(i==' ')
            {
                res.push_back(t);
                t=string();
            }
            else
                t+=i;
        }
        if(t!="")
            res.push_back(t);
        return res;
    }
    bool areSentencesSimilar(string sentence1, string sentence2) {
        vector<string>s1,s2;
        s1=toStrArr(sentence1);
        s2=toStrArr(sentence2);
        return s1.size()>s2.size()?areSame(s1,s2):areSame(s2,s1);
    }
};

过了不容易啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值