Liệt kê các xâu con
Submit solution
Points:
3
Time limit:
1.0s
Memory limit:
98M
Author:
Problem types
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG
Cho một xâu ký tự x, một xâu con là một dãy liên tục các ký tự trong x có ít nhất 1 ký tự trở lên. Bạn hãy lập trình nhập vào xâu x và liệt kê tất cả các xâu con phân biệt của x có ít nhất một ký tự trở lên sao cho chúng tăng dần theo từ điển.
Input
Một xâu x có độ dài không quá 50 ký tự gồm toàn ký tự thường Tiếng Anh
Output
Các xâu con phân biệt của x được sắp xếp theo thứ tự từ điển mỗi xâu con trên một dòng
Ví dụ
Input:
banana
Output:
a
an
ana
anan
anana
b
ba
ban
bana
banan
banana
n
na
nan
nana
Ví dụ 2
Input
baoban
Output
a
an
ao
aob
aoba
aoban
b
ba
ban
bao
baob
baoba
baoban
n
o
ob
oba
oban
Comments
include <bits/stdc++.h>
using namespace std;
unordered_set<string> D;
void tach(string s) { if (D.find(s) != D.end()) { return; } D.insert(s); if (s.length() > 1) { tach(s.substr(1)); tach(s.substr(0, s.length() - 1)); } }
int main() { string string1=""; getline(cin,string1); tach(string1); vector<string> z(D.begin(), D.end()); sort(z.begin(), z.end()); for (const string& str : z) { cout << str <<endl; }
}