leet-code---键盘行

本文介绍了一个利用哈希表实现的算法,用于判断字符串中的字符是否位于同一键盘行,通过不同键盘行的哈希集合进行高效判断。

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

 

 

 

#include <iostream>
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;

vector<string> findWords(vector<string>& words);

class Solution {
public:
	vector<string> findWords(vector<string>& words) {
		vector<string> res;
		unordered_set<char> row1{ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P' };
		unordered_set<char> row2{ 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L' };
		unordered_set<char> row3{ 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'Z', 'X', 'C', 'V', 'B', 'N', 'M' };
		for (string word : words) {
			int a = 0;
			int b = 0;
			int c = 0;
			for (char ch : word) {
				if (row1.count(ch)) a = 1;
				else if (row2.count(ch)) b = 1; //row2.count(ch)判断row2中有无ch数据,有返回1,无返回0。
				else if (row3.count(ch)) c = 1;

				if (a + b + c > 1) break;
			}
			if (a + b + c > 1)
			    cout << "不在同一键盘行" << endl;
			if (a + b + c == 1)
			{
				res.push_back(word);
				cout << "在同一键盘行" << endl;
			}
			
		}
		return res;
	}
};

void  main()
{
	vector<string> input,output;
	string str;
	Solution So;
	cout << "输入字符串:" << endl;
	cin >> str;
	input.push_back(str);
	So.findWords(input);
}

关于unordered_set:

unordered_set基于哈希表,是无序的。

set实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。

平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。

unordered_map

存储机制是哈希表,,即unordered_map内部元素是无序的。

头文件:#include<unordered_map>  #include<unordered_set>

什么叫hash表?

 

一、核心问题定位 路径错误:源文件在 src/ 但 CMake 配置未指定源路径 构建工具缺失:Ninja 未安装或未加入环境变量 快捷键冲突:搜狗输入法劫持了 VS Code 快捷键 二、逐项修复步骤 1. 修正 CMake 构建路径 修改 tasks.json 中的 Configure this project 命令: json "command": "cmake.exe -DCMAKE_TOOLCHAIN_FILE=..\\cmake\\toolchain.cmake -S src -B build -G Ninja" -S src 表示源文件在 src/ 目录,-B build 表示构建输出到 build/ 2. 安装 Ninja 构建工具 下载 Ninja:https://github.com/ninja-build/ninja/releases 解压后将 ninja.exe 复制到 D:\\wecode_build_tools\\mingw\\bin\\ 验证安装:命令输入 ninja --version 3. 修复调试器路径 修改 launch.json 的 target 字段: json "target": "${workspaceFolder}/build/leet.exe" 确保 CMake 输出的可执文件路径与调试器路径一致 4. 解决快捷键冲突 替代方案 1:使用任务运器 右键点击编辑器 -> 选择 Run Build Task... 选择 Build 任务 替代方案 2:修改快捷键 文件 -> 首选项 -> 键盘快捷方式 搜索 workbench.action.tasks.build 右键修改为其他快捷键(如 Ctrl+Alt+B) 三、完整验证流程 初始化构建环境 删除项目中的 build/ 文件夹 我已经将你给出的操作一步不差的完成了以上,在重新运 Configure this project 任务的时候终端显示 * 终端进程“C:\Windows\System32\cmd.exe /C cmake.exe -DCMAKE_TOOLCHAIN_FILE=..\cmake\toolchain.cmake -S src -B build -G Ninja”已终止,退出代码: 1。 * 终端将被任务重用,按任意键关闭。
最新发布
08-02
我发现我之前已经有tasks.json和launch.json文件了,里面的代码分别是 { "version": "2.0.0", "options": { "cwd": "${workspaceRoot}", "env": { "PATH": "D:\\wecode_build_tools\\mingw\\bin;${env:PATH}" }, "shell": { "executable": "${env:SystemRoot}\\System32\\cmd.exe", "args": [ "/C" ] } }, "problemMatcher": "$wecodeCpp", "type": "shell", "tasks": [ { "label": "Configure this project", "command": "cmake.exe -DCMAKE_TOOLCHAIN_FILE=..\\cmake\\toolchain.cmake -S . -B .\\build -G Ninja", "detail": "Build之前必须先执此Config命令,生成Ninja构建工程,否则会出错" }, { "label": "Build", "command": "cmake --build build --target all", "dependsOn": [ "Configure this project" ], "detail": "执增量的构建" }, { "label": "Rebuild all", "command": "cmake --build build --target all --clean-first --", "dependsOn": [ "Configure this project" ], "detail": "重新执所有构建" }, { "label": "Clean Build", "command": "cmake --build build --target clean --", "detail": "删除构建过程中的所有中间文件" }, { "label": "Run", "command": ".\\bin\\leet.exe", "detail": "执编译出来的目标程序" }, { "label": "Build & Run", "dependsOrder": "sequence", "dependsOn": [ "Build", "Run" ], "detail": "执增量构建并运目标程序" }, { "label": "Open Shell for mingw", "command": "cmd.exe", "detail": "打开mingw的Shell 窗口" } ] } 和 { "version": "0.2.0", "configurations": [ { "name": "leet", "type": "gdb", "request": "launch", "target": "${workspaceFolder}/bin/leet", "arguments": "", "terminal": "", "stopAtEntry": false, "cwd": "${workspaceFolder}", "env": {}, "internalConsoleOptions": "openOnSessionStart", "gdbpath": "D:/wecode_build_tools/mingw/bin/gdb.exe", "preLaunchTask": "Build", "valuesFormatting": "prettyPrinters" } ] } 还有我的源文件是在src文件夹底下的,我按Ctrl+Shift+B出现的是搜狗输入法的设置页面,这个快捷键能不能替代
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai智享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值