500. Keyboard Row

本文介绍了一种解决LeetCode上键盘行单词问题的方法,通过遍历和条件判断筛选出完全由同一行键盘字母组成的单词。代码使用JavaScript实现,并附有详细的注释解释。

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

500. Keyboard Row

1、LeetCode上的简单题,写了好半天,代码还比较多,刚学,能过就满意了;

2、整体思路(待会儿写):

 1 <script>
 2         // arr=["Hello", "Alaska", "Dad", "Peace"]
 3         var findWords = (words) => {
 4             // 把所有字母放在一个字符串中,利用index值
 5             //  0-9  表示键盘上第一行字母,即:q --->p
 6             // 10-18 表示键盘上第二行字母,即:a --->l
 7             // 19-25 表示键盘上第二行字母,即:z --->m    
 8             let rowArr = "qwertyuiopasdfghjklzxcvbnm";
 9             // 定义一个空数组,接收符合条件的元素
10             let resArr = [];
11             // 定义一个标志位,true表示符合条件,false表示不符合
12             let flag = null;
13             // 第一次循环,遍历words数组中的每个元素
14             for (let i = 0; i < words.length; i++) {
15                 //定义一个空数组,转换成小写的words数组
16                 let arr = [];
17                 //大写转小写
18                 arr[i] = words[i].toLowerCase();
19                 // 判断第一个字母是否在0-9之间,在,则表示表示第一排字母
20                 if (rowArr.indexOf(arr[i][0]) < 10) {
21                     // flag复位,因为每处理完一次words中的一个元素后,flag的值会发生变化,所以每次进到一个if中需要复位到true
22                     flag = true;
23                     // 遍历words[i]中的每个字母
24                     for (let j = 0; j < arr[i].length; j++) {
25                         if (rowArr.indexOf(arr[i][j]) >= 10) {
26                             flag = false
27                             break;
28                         }
29                     }
30                 }
31 
32                 // 判断第一个字母是否在9-18之间,在,则表示表示第二排字母
33                 if (rowArr.indexOf(arr[i][0]) >= 10 && rowArr.indexOf(arr[i][0]) <= 18) {
34                     flag = true;
35                     for (let j = 0; j < arr[i].length; j++) {
36                         if (rowArr.indexOf(arr[i][j]) <= 9 || rowArr.indexOf(arr[i][j]) >= 19) {
37                             flag = false;
38                             break;
39                         }
40                     }
41                 }
42 
43                 // 判断第一个字母是否在18-25之间,在,则表示表示第三排字母
44                 if (rowArr.indexOf(arr[i][0]) >= 19) {
45                     flag = true;
46                     for (let j = 0; j < arr[i].length; j++) {
47                         if (rowArr.indexOf(arr[i][j]) <= 18) {
48                             flag = false;
49                             break;
50                         }
51                     }
52                 }
53                 if (flag) {
54                     resArr.push(words[i])
55                 }
56             }
57             return resArr
58         }
59 
60         console.log(findWords(["Hello", "Alaska", "Dad", "Peace"]));
61     </script>

 

转载于:https://www.cnblogs.com/MisterZZL/p/10653301.html

### QT Quick VirtualKeyboard 使用指南 #### 定义自定义键盘布局 对于希望创建特定于应用需求的键盘布局,可以利用`QtQuick.VirtualKeyboard`模块中的公共扩展API来实现这一点。例如,在文件 `layouts/en_GB/main.qml` 中,可以通过继承`KeyboardLayout`组件并添加所需的按键来自定义布局[^2]。 ```qml import QtQuick 2.0 import QtQuick.Layouts 1.0 import QtQuick.VirtualKeyboard 2.1 // 自定义英语(英国)键盘布局 KeyboardLayout { id: customEnglishUKLayout keyWeight: 160 KeyboardRow { Key { key: Qt.Key_Q text: "q" } // 更多键位... } } ``` 此代码片段展示了如何构建一个简单的英式键盘行,其中包含了字母 'Q' 的按键配置。开发者可以根据实际需要调整各个属性值以适应不同的应用场景。 #### 处理输入法事件 当应用程序接收到用户的按键操作时,可能需要触发相应的逻辑处理程序。这通常涉及到向输入法发送键事件。下面是一个简单的方法用于模拟按下某个字符: ```python from PyQt5.QtCore import QCoreApplication, Qt def send_key_event(key_code): app = QCoreApplication.instance() event = QtGui.QKeyEvent( QtCore.QEvent.KeyPress, int(Qt.KeyCode(key_code)), Qt.NoModifier, chr(key_code)) QtWidgets.QApplication.sendEvent(app.focusWidget(), event) send_key_event(ord('A')) # 发送大写字母 A 键盘事件 ``` 这段 Python 脚本演示了怎样构造并分发一个代表按下了指定ASCII码对应字符(这里是'A')的键盘事件给当前具有焦点的小部件。注意这里假设使用的是PyQt框架;如果是纯C++项目,则应采用相应的方式生成类似的事件对象。 #### 常见问题解答 - **为什么我的自定义键盘无法正常工作?** 如果遇到此类情况,请确认已经正确设置了所有必要的参数,并且遵循官方文档中关于加载自定义资源的规定。另外还需确保所依赖的基础库版本兼容性良好。 - **如何获取窗口句柄以便集成其他特性如任务栏进度条?** 由于任务栏进度条等功能需调用Windows特有的接口,因此必须先通过`setWindow()`方法为相关控件分配有效的`QWindow*`指针作为其父级容器。然而需要注意该过程应在窗口完全呈现之后完成,因为直到此时才会真正拥有合法的手柄实例[^3]。 - **从Qt 5迁移到Qt 6的过程中遇到了哪些挑战?** 随着新版本发布带来的架构变动和技术革新,部分原有功能或许会被重构甚至移除。为此官方准备了一份详尽的迁移手册帮助开发人员顺利完成过渡。此外还持续改进着跨平台的支持力度,使得更多类型的设备能够享受到一致性的用户体验[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值