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
}