当前位置: 首页 > article >正文

422. 有效的单词方块

422. 有效的单词方块

一、题目描述

给你一个字符串数组 words,如果它能形成一个有效的单词方块 ,则返回 true 。

有效的单词方块是指此由字符串数组组成的文字方块的第 k 行和第 k 列所显示的字符串完全相同,其中 0 <= k < max(numRows, numColumns) 。

示例

  1. 示例 1
    • 输入words = ["abcd","bnrt","crmy","dtye"]
    • 输出true
    • 解释:
      • 第 1 行和第 1 列都读作 "abcd"。
      • 第 2 行和第 2 列都读作 "bnrt"。
      • 第 3 行和第 3 列都读作 "crmy"。
      • 第 4 行和第 4 列都读作 "dtye"。
      • 因此,它构成了一个有效的单词方块。
  2. 示例 2
    • 输入words = ["abcd","bnrt","crm","dt"]
    • 输出true
    • 解释:
      • 第 1 行和第 1 列都读作 "abcd"。
      • 第 2 行和第 2 列都读作 "bnrt"。
      • 第 3 行和第 3 列都读作 "crm"。
      • 第 4 行和第 4 列都读作 "dt"。
      • 因此,它构成了一个有效的单词方块。
  3. 示例 3
    • 输入words = ["ball","area","read","lady"]
    • 输出false
    • 解释:
      • 第 3 行读作 "read" 而第 3 列读作 "lead"。
      • 因此,它不构成一个有效的单词方块。

提示

  1. 1 <= words.length <= 500
  2. 1 <= words[i].length <= 500
  3. words[i] 仅由小写英文字母组成

二、代码实现

package _422;

import java.util.Arrays;
import java.util.List;

public class LeetCode422 {
    public boolean validWordSquare(List<String> words) {
        int n = words.size();
        char[][] matrix = new char[n][];
        for (int i = 0; i!= n; i++) {
            char[] chars = words.get(i).toCharArray();
            if (chars.length > n) return false;
            matrix[i] = Arrays.copyOf(chars, n);
        }
        for (int i = 0; i!= n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (matrix[i][j]!= matrix[j][i]) return false;
            }
        }
        return true;
    }
}

上述代码首先将输入的字符串列表转换为字符矩阵,并在转换过程中检查每行长度是否符合要求。然后通过双重循环比较矩阵中对称位置的字符,判断是否构成有效的单词方块。

三、代码分析

  1. 初始化与边界检查
    • 获取单词列表 words 的大小 n,并初始化一个字符二维数组 matrix 用于存储单词方块。
    • 遍历 words,将每个单词转换为字符数组,并检查其长度是否超过 n,若超过则直接返回 false,因为无法构成有效的单词方块。然后将字符数组复制到 matrix 中,并填充为长度 n
  2. 检查对称位置字符
    • 通过两层嵌套循环,遍历矩阵中 i 行 j 列与 j 行 i 列(j > i)的字符。如果发现任意一对对称位置的字符不相等,则返回 false
  3. 返回结果
    • 如果上述循环没有返回 false,说明所有对称位置的字符都相等,即构成有效的单词方块,返回 true

http://www.kler.cn/a/514180.html

相关文章:

  • 【SpringCloud】黑马微服务学习笔记
  • kotlin的协程的基础概念
  • 【Linux】环境变量
  • 【高阶数据结构】布隆过滤器(BloomFilter)
  • numpy库ndarray维度问题
  • WebSocket 和 Socket 的区别
  • 在stm32中C语言编写的程序中,一个整形数据是怎么存储的,高位在前还是低位在前
  • Qt按钮美化教程
  • 高频交易中 FPGA 的作用及面试指南
  • 小红书用户作品列表 API 系列,返回值说明
  • Go CSP并发模型
  • python md5加密
  • 《AI赋能光追:开启图形渲染新时代》
  • 3.1 Go函数调用过程
  • 论文+AI赋能教育:探索变革路径与创新实践。包括word和pdf格式。
  • 校园二手交易平台小程序设计与实现(LW+源码+讲解)
  • Vue.js 组件开发:打造高效、可维护的前端架构
  • web前端3--css
  • Java设计模式 五 建造者模式 (Builder Pattern)
  • Redis实训:社交关注关系存储任务
  • OneData体系架构详解
  • react中hooks之 React 19 新 Hooks useActionState useFormStatus用法总结
  • js重要知识点
  • MySQL入门(数据库、数据表、数据、字段的操作以及查询相关sql语法)
  • SQL中字符串截取函数(substring)
  • 解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误