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


  • 0
    Phuc001  commented on Sept. 6, 2024, 12:43 a.m.
    #include <bits/stdc++.h>
    using namespace std;
    set<string> res;
    void DAC(string x){
        if( x== "" )return;
        if(res.find(x) !=res.end()) return;
        res.insert(x);
        DAC(x.substr(0,x.size()-1));
        DAC(x.substr(1,x.size()-1));
    }
    int main(){
        string x;
        cin>>x;
        DAC(x);
        for (auto r:res) cout<<r<<"\n";
    
    }

  • 0
    huyape7  commented on Sept. 15, 2023, 5:14 p.m.

    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; }

    return 0;

    }