【34·参考】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 。

https://leetcode.cn/problems/sentence-similarity-iii/description/

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
 */

package com.huawei.prac;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Objects;

class SolutionNd {

    public static void main(String[] args) {
        String sentence1 = "My name is a Haley";
        String sentence2 = "a Haley";
        System.out.println(areSentencesSimilar(sentence2, sentence1));
        System.out.println(areSentencesSimilar("a b", "b a"));
    }

    /**
     * 1813. 句子相似性 III[双端队列]
     *
     * @param sentence1 字符串1
     * @param sentence2 字符串2
     * @return 是否相似
     */
    public static boolean areSentencesSimilar(String sentence1, String sentence2) {
        // 匹配一个或多个空格
        String[] sens1 = sentence1.split(" +");
        String[] sens2 = sentence2.split(" +");

        if (sens1.length < sens2.length) {
            String[] tmp = sens1;
            sens1 = sens2;
            sens2 = tmp;
        }
        Deque<String> queue1 = new LinkedList<>();
        for (String str : sens1) {
            queue1.offer(str);
        }
        Deque<String> queue2 = new LinkedList<>();
        for (String str : sens2) {
            queue2.offer(str);
        }
        while (!queue2.isEmpty()) {
            // 头相同或尾相同则符合条件
            if (Objects.equals(queue2.peekFirst(), queue1.peekFirst())) {
                queue1.pollFirst();
                queue2.pollFirst();
                continue;
            }
            if (Objects.equals(queue2.peekLast(), queue1.peekLast())) {
                queue1.pollLast();
                queue2.pollLast();
                continue;
            }
            return false;
        }
        return true;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值