Leetcode500. 键盘行

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
  }
发布了125 篇原创文章 · 获赞 2 · 访问量 6841

猜你喜欢

转载自blog.csdn.net/sunhaiting666/article/details/104584603