首页 > 其他分享 >力扣每日一题2023.1.16---1813. 句子相似性 III

力扣每日一题2023.1.16---1813. 句子相似性 III

时间:2023-01-16 23:45:52浏览次数:52  
标签:空格 1813 16 --- 插入 sentence1 sentence2 单词 句子

一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,"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 。

示例 1:
输入:sentence1 = "My name is Haley", sentence2 = "My Haley"
输出:true
解释:可以往 sentence2 中 "My" 和 "Haley" 之间插入 "name is" ,得到 sentence1 。

示例 2:
输入:sentence1 = "of", sentence2 = "A lot of words"
输出:false
解释:没法往这两个句子中的一个句子只插入一个句子就得到另一个句子。

示例 3:
输入:sentence1 = "Eating right now", sentence2 = "Eating"
输出:true
解释:可以往 sentence2 的结尾插入 "right now" 得到 sentence1 。

示例 4:
输入:sentence1 = "Luky", sentence2 = "Lucccky"
输出:false

提示:
    1 <= sentence1.length, sentence2.length <= 100
    sentence1 和 sentence2 都只包含大小写英文字母和空格。
    sentence1 和 sentence2 中的单词都只由单个空格隔开。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sentence-similarity-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

由于只能插入一个句子,所以这个句子要么在开头插入,要么在中间插入,要么在最后插入。

可以想到,从头往后遍历相同的子句,记录长度,再从后往前遍历相同的子句,记录长度。最后将两次的结果相加,如果大于等于最短的句子长度,则必定可以只插入一个句子来达成目的。

一开始没有考虑空格问题,结果挂在了这个例子:"Luky" "Lucccky"

再加一个空格判断就行。

class Solution {
    public boolean areSentencesSimilar(String sentence1, String sentence2) {
//        前后加一个空格,就不用判断是否是开头和结尾的问题
        sentence1 = ' ' + sentence1 + ' ';
        sentence2 = ' ' + sentence2 + ' ';
        int minLen = Math.min(sentence1.length(), sentence2.length());
//        计数器,用来保存从前往后数,相同子句的长度
        int t1 = 0;
//        用来判断是否是同一个单词,避免某两个单词开头几个字母相同,之后字母不同,或者没有空格的情况。
        int j1 = 0;
//        从前往后遍历。
        for (int i = 0; i < minLen; i ++) {
            if (sentence1.charAt(i) != sentence2.charAt(i)) {
//                避免单词开头几个字母相同,之后不同,或者没有空格的情况。
                t1 = t1 - j1;
                break;
            }
//            判断是否开始一个新的单词
            if (sentence1.charAt(i) == ' ') {
                j1 = 0;
            } else {
//                新单词的长度
                j1 ++;
            }
            t1 ++;
        }
//        计数器,用来保存从前往后数,相同子句的长度
        int t2 = 0;
//        用来判断是否是同一个单词,避免某两个单词开头几个字母相同,之后字母不同,或者没有空格的情况。
        int j2 = 0;
//        从后往前遍历,中间的步骤和从前往后遍历完全相同。
        for (int i = 0; i < minLen; i ++) {
            char c = sentence1.charAt(sentence1.length() - i - 1);
            if (c != sentence2.charAt(sentence2.length() - i - 1)) {
                t2 = t2 - j2;
                break;
            }
            if (c == ' ') {
                j2 = 0;
            } else {
                j2 ++;
            }
            t2 ++;
        }
        return t1 + t2 >= minLen;
    }
}

运行结果:

运行结果

 

标签:空格,1813,16,---,插入,sentence1,sentence2,单词,句子
From: https://www.cnblogs.com/allWu/p/17056721.html

相关文章

  • ABAP 编程语言里的 Reference Semantic - 引用语义
    ABAP编程语言里,对ABAP类实例(类对象)或匿名数据对象的多个引用,使用引用语义(ReferenceSemantic)解析。这意味着:引用单个类对象或匿名数据对象的所有变量,在内存中共享......
  • SFINAE - 模板中的enable_if
    ref:https://github.com/wuye9036/CppTemplateTutorial#323-特化一些其它问题这段就是说:这个int实参在替换第一个inc_counter时,enable_if<false>,所以直接替换失败。......
  • Jmeter学习:采样器--http 请求采样器/Websocket 采样器/dubug 采样器
    一、http请求采样器功能:通过该组件,我们可以进行Http采样 Basic常用参数已经在截图上。GET请求可将参数填写在Parameters中。参数:FollowRedirescts和Rediect......
  • 【Basic Knowledge】Self-Attention Generative Adversarial Networks
    Note  这是一篇将Self-Attention应用到GAN中的paper,Self-Attention模块是卷积模块的补充,能够有助于建模跨图像区域的长范围、多层次依赖关系。文中主要提到4点:在生......
  • 每天一点基础K8S--使用基础ingress进行灰度发布
    利用ingress实现灰度发布1、背景ingress可以实现七层负载,可以根据请求header不同将流量代理到后端不同的service服务。比如:后端网站进行了更新,为了不全网更换,可以利用i......
  • 230116_50_SpringBoot入门
    指定自定义的配置文件bill.propertiesbill.properitesname=billage=11happy=falsebirth=2021/12/2通过@PropertySource注解指定自定义的配置文件@PropertyS......
  • 网络协议-session+cookie
    (1)当客户端PC的浏览器第一次访问某个web站点资源时,客户端提交没有带SessionID的请求(请求报文头没有Cookie头域信息)。而web服务器会检查是否有SessionID过来,没有则创建Sess......
  • 网络协议-http访问网站
    (1)HTTP访问网站简要描述:1.在无任何缓存的情况下,先通过DNS服务器来解析域名对应的IP地址;2.PC的浏览器通过解析出来的服务器地址与服务器发起TCP三次握手建立TCP会话;3......
  • Matplotlib学习笔记2 - 循序渐进
    Matplotlib学习笔记2-循序渐进调整“线条”在Matplotlib中,使用plot函数绘制的线条其实是一种特定的类,matplotlib.lines.Line2D。线条有许多参量可调整,例如宽度、样式、......
  • day03-Spring管理Bean-IOC-01
    Spring管理Bean-IOC1.Spring配置/管理bean介绍Bean管理包括两方面:创建bean对象给bean注入属性Bean的配置方式:基于xml文件配置方式基于注解配置方式2.基于X......