题解 P5876 【化简单词】

rui_er

2020-01-15 13:51:15

Solution

看来前面题解的各种做法(其实也就两种),我决定给你们写一篇STL的。 ### 介绍一下使用的函数:```substr()``` 这个函数有两个参数,第一个是起始位置,第二个是子串长度,作用是取字符串的一部分,返回值为这段的内容。用法: ```cpp string s; s.substr(0, 5); ``` 表示取字符串 $s$ 的前五位。 ### 看一眼数据范围 发现可以暴力!于是就有了下面的思路: > 枚举每个字符串,枚举前缀位数,判断这个前缀是否也是其他字符串的前缀:如果是,前缀位数加一,继续判断;如果不是,说明找到了最短的前缀,输出。 ### 你们最爱的代码 ```cpp //By: Luogu@rui_er(122461) #include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; string s[51]; for(int i=1;i<=n;i++) cin>>s[i]; for(int i=1;i<=n;i++) { for(int j=1;j<=s[i].length();j++) { bool book = true; for(int k=1;k<=n;k++) { if(k == i) continue; if(s[i].substr(0, j) == s[k].substr(0, j)) { book = false; break; } } if(book) { cout<<s[i].substr(0, j)<<endl; break; } } } return 0; } ``` 实测AC。