LeetCode第500题 - 键盘行

这篇具有很好参考价值的文章主要介绍了LeetCode第500题 - 键盘行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。
示例:

输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]

解答

class Solution {
    public String[] findWords(String[] words) {

        char[][] keyboard = {
            {'1', '1'}
            // 第一行,大写字母
            ,{'Q', '1'}
            ,{'W', '1'}
            ,{'E', '1'}
            ,{'R', '1'}
            ,{'T', '1'}
            ,{'Y', '1'}
            ,{'U', '1'}
            ,{'I', '1'}
            ,{'O', '1'}
            ,{'P', '1'}
            // 第一行,小写字母
            ,{'q', '1'}
            ,{'w', '1'}
            ,{'e', '1'}
            ,{'r', '1'}
            ,{'t', '1'}
            ,{'y', '1'}
            ,{'u', '1'}
            ,{'i', '1'}
            ,{'o', '1'}
            ,{'p', '1'}
            // 第二行,大写字母
            ,{'A', '2'}
            ,{'S', '2'}
            ,{'D', '2'}
            ,{'F', '2'}
            ,{'G', '2'}
            ,{'H', '2'}
            ,{'J', '2'}
            ,{'K', '2'}
            ,{'L', '2'}
            // 第二行,小写字母
            ,{'a', '2'}
            ,{'s', '2'}
            ,{'d', '2'}
            ,{'f', '2'}
            ,{'g', '2'}
            ,{'h', '2'}
            ,{'j', '2'}
            ,{'k', '2'}
            ,{'l', '2'}
            // 第三行,大写字母
            ,{'Z', '3'}
            ,{'X', '3'}
            ,{'C', '3'}
            ,{'V', '3'}
            ,{'B', '3'}
            ,{'N', '3'}
            ,{'M', '3'}
            // 第三行,小写字母
            ,{'z', '3'}
            ,{'x', '3'}
            ,{'c', '3'}
            ,{'v', '3'}
            ,{'b', '3'}
            ,{'n', '3'}
            ,{'m', '3'}
        };
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < words.length; ++i) {
        	String word = words[i];
        	if (word.isEmpty()) {
        		continue;
        	}
        	int length = word.length();
        	
        	int level = 0;
        	int lastLevel = 0;
        	
        	boolean found = false;
        	for (int j = 0; j < length; ++j) {
        		char c = word.charAt(j);
        		
        		for (int k = 0; k < keyboard.length; ++k) {
        			if (keyboard[k][0] == c) {
        				level = keyboard[k][1];
        				break;
        			}
        		}
        		
        		if (j == 0) {
        			lastLevel = level;
        		}
        		else if (lastLevel != level){
        			found = true;
        			break;
        		}
        	}
        	
        	if (found) {
        		continue;
        	}
        	sb.append(word).append(",");
        }
        
        if (sb.length() == 0) {
        	return new String[]{};
        }
        
        String out = sb.deleteCharAt(sb.length() - 1).toString();
        return out.split(",");
    }
}

要点
题目自身不困难,准备字母和键盘的映射关系,花了点时间。
不太适应在网页上直接输入代码,所以还是按照平常的工作习惯,在eclipse里输入代码,同时写好用例,用例通过后,再提交,对通过率非常有帮助。

准备的用例,如下文章来源地址https://www.toymoban.com/news/detail-828075.html

	@Test
	public void test1() {
		String[] words = {"Hello", "Alaska", "Dad", "Peace"}; 
		String[] values = new L500().findWords(words);
		assertEquals("Alaska", values[0]);
		assertEquals("Dad", values[1]);
	}
	@Test
	public void test2() {
		String[] words = {"Hello"}; 
		String[] values = new L500().findWords(words);
		
		assertEquals(0, values.length);
	}
	
	@Test
	public void test3() {
		String[] words = {"Alaska"}; 
		String[] values = new L500().findWords(words);
		
		assertEquals("Alaska", values[0]);
	}
	
	@Test
	public void test4() {
		String[] words = {"Hello", "", "Dad", "Peace"}; 
		String[] values = new L500().findWords(words);
		assertEquals(1, values.length);
		assertEquals("Dad", values[0]);
	}
	
	@Test
	public void test5() {
		String[] words = {"Hello", "    ", "Dad", "Peace"}; 
		String[] values = new L500().findWords(words);
		assertEquals(1, values.length);
		assertEquals("Dad", values[0]);
	}

到了这里,关于LeetCode第500题 - 键盘行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode-Java(04)

     固定第一个数,从后面找第二个和的三个数的和等于第一个数,转化为两数之和问题。比target大,则l--,否则r++,直到找到三个数  和上一题一样,之多加了一个判断语句 if(Math.abs(target - sum) Math.abs(target - ans)) 回溯法 队列 第一步肯定还是先排序,和三数之和一样的思想,就

    2024年02月14日
    浏览(19)
  • leetcode90. 子集 II(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subsets-ii 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入:nums = [1,2,2] 输出:[[],[1],[1,2],

    2024年02月09日
    浏览(42)
  • leetcode15. 三数之和(java)

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,

    2024年02月10日
    浏览(36)
  • leetcode--回溯算法.全排列(java)

    leetcode 46 原题链接-- 全排列 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2: 输入:nums = [0,1] 输出:[[0,1],[1,0]] 示例3: 输入:nums = [1

    2024年02月08日
    浏览(34)
  • leetcode51. N 皇后 (java)

    原题链接: https://leetcode.cn/problems/n-queens/ 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决

    2024年02月07日
    浏览(45)
  • leetcode 881. 救生艇(java)

    难度 - 中等 leetcode 881. 救生艇 给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。 示例 1: 输入:people = [1,2], limit = 3 输

    2024年02月13日
    浏览(30)
  • leetcode61. 旋转链表(java)

    Leetcode链接: https://leetcode.cn/problems/rotate-list/ 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例2: 输入:head = [0,1,2], k = 4 输出:[2,0,1] 提示: 链表中节点的数目在范围 [0, 500] 内 -100 = Node.va

    2024年02月08日
    浏览(50)
  • leetcode77. 组合(回溯算法-java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combinations 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 输入:n = 1, k = 1 输出:[[1]] 提示:

    2024年02月11日
    浏览(53)
  • leetcode 2. 两数相加(java)

    难度 - 中等 leetcode 2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    2024年02月09日
    浏览(38)
  • leetcode 74. 搜索二维矩阵(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/search-a-2d-matrix 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包