Leetcode500. 键盘行

本文解析了LeetCode上的键盘行问题,通过判断单词中所有字符是否在同一行,实现筛选符合条件的单词。提供了详细的解题思路及Scala代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode500. 键盘行

题目:
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
在这里插入图片描述
示例:

输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]

题解:
1.对每个元素中的第一个字符取出判断在键盘的第几行;
2.遍历每个元素其他的字符是否属于当前行的字符;
3.如果是存入数组中返回结果。
scala代码:

/**
    *
    * @param words
    * @return
    */
  def findWords(words: Array[String]): Array[String] = {
    val result = mutable.ArrayBuffer[String]()
    if (words == null) {
      null
    } else {
      val lines = Array("qwertyuiop", "asdfghjkl", "zxcvbnm")
      for (word <- words) {
        val bool = judge(word.toLowerCase(), lines)
        if (bool == true) {
          result.append(word)
        }
      }
      result.toArray
    }
  }


  def judge(word: String, lines: Array[String]): Boolean = {
    var flag = true
    var find: String = null
    // 先用word首字符确定属于哪一行,判断结束后跳出循环
    breakable {
      for (line <- lines) {
        if (line.indexOf(word.charAt(0)) > -1) {
          find = line
          break()
        }
      }
    }
    if (find == null) {
      flag = false
    } else {
      // 判断word字符串所有字符是否都属于同一行,如果不属于,跳出循环
      breakable {
        for (i <- 1 until word.length) {
          if (find.indexOf(word.charAt(i)) < 0) {
            flag = false
            break()
          }
        }
      }
    }
    flag
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值