给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的电话是它的前缀,当拨打Bob的电话时会先接通Emergency,所以这些电话号码不是一致的。 输入 第一行是一个整数t,1 ≤ t ≤ 40,表示测试数据的数目。 每个测试样例的第一行是一个整数n,1 ≤ n ≤ 10000,其后n行每行是一个不超过10位的电话号码。 输出 对于每个测试数据,如果是一致的输出“YES”,如果不是输出“NO”。
时间: 2024-02-23 21:57:26 浏览: 170
好的,这道题可以使用Trie树来解决。具体思路如下:
1. 构建Trie树,将每个电话号码的数字序列作为一个字符串插入到Trie树中。
2. 对于每个电话号码,从Trie树的根节点开始,逐位匹配号码中的数字,直到匹配到一个不存在的节点或到达一个结束节点。
3. 如果某个电话号码的所有数字都可以在Trie树中匹配到一个节点,并且在Trie树中对应的节点不是某个其他电话号码的结束节点,就说明该电话号码是独立的,不与其他号码有前缀关系。
4. 如果在匹配过程中发现某个电话号码的所有数字都可以在Trie树中匹配到一个节点,并且在Trie树中对应的节点是某个其他电话号码的结束节点,就说明该电话号码是某个其他电话号码的前缀,这时需要立即停止匹配并输出“NO”。
5. 如果所有电话号码都可以通过上述方式检查并没有出现前缀关系的情况,就说明这些电话号码是一致的,输出“YES”。
下面是使用Python实现的代码示例:
相关问题
pg 判断字符串前缀是否为某个
可以使用 PostgreSQL 内置函数 `substring` 来判断字符串前缀是否为某个。具体方法如下:
```sql
SELECT CASE WHEN substring('your_string' from 1 for length('prefix')) = 'prefix' THEN true ELSE false END;
```
其中,`your_string` 是需要判断的字符串,`prefix` 是需要判断的前缀。如果 `your_string` 的前缀是 `prefix`,则返回 `true`,否则返回 `false`。
用c++代码实现某城市电话号码分三组判断,分别是: 地区码—— 空白或三位数字; 前缀—— 非‘0’或‘1’开头的三位数字; 后缀—— 4位数字。 假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的电话号码
以下是用 C++ 实现的代码:
```cpp
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
string phoneNum;
regex pattern("[0-9]{3} [^01][0-9]{2} [0-9]{4}"); // 正则表达式
cout << "请输入电话号码(格式为:地区码 前缀 后缀):" << endl;
while (getline(cin, phoneNum)) {
if (regex_match(phoneNum, pattern)) {
cout << "符合规定的电话号码!" << endl;
} else {
cout << "不符合规定的电话号码!" << endl;
}
cout << "请输入电话号码(格式为:地区码 前缀 后缀):" << endl;
}
return 0;
}
```
解释:
- 首先定义了一个字符串 `phoneNum`,用于存储用户输入的电话号码;
- 然后定义了一个正则表达式 `pattern`,它的含义是:以三个数字开头,后跟一个空格和三个非 '0' 或 '1' 的数字,再后跟一个空格和四个数字;
- 接着通过 `getline(cin, phoneNum)` 从标准输入读取用户输入的电话号码,如果读取失败(比如用户按下了 Ctrl+C),则退出程序;
- 然后使用 `regex_match(phoneNum, pattern)` 来判断输入的电话号码是否符合正则表达式 `pattern` 的规定;
- 最后根据判断结果输出相应的提示信息,然后再次提示用户输入电话号码,进入下一轮循环。
注意:这里使用了 C++11 中引入的正则表达式库,建议在编译时加上 `-std=c++11` 参数。
阅读全文