Mündəricat
Problem bəyanat
"Lisenziyanın açarının formatlanması" problemində giriş a sim lisenziya açarını təmsil edən simvollar. Başlanğıcda, simli aralarındakı N tire ilə N + 1 qruplarına (sözlərə) ayrılır. Bizə bir K ədədi də verilir və məqsəd simli formatlaşdırmaqdır ki, hər bir qrup K-dan kiçik simvollara icazə verilən birincisi xaricində tam K simvolları ehtiva etsin. '(tire) və yalnız böyük hərflərə malikdir.
misal
S = "5F3Z-2e-9-w", K = 4
5F3Z-2E9W
S = "2-5g-3-J", K = 2
2-5G-3J
Yanaşma
S (giriş) sətrində geriyə doğru təkrar edərkən yeni bir sətir yaratmağımız intuitivdir. Bu vacibdir, çünki birinci qrup xaricində bütün digər qrupların içərisində tam olaraq 'k' hərfləri olmalıdır. Yenidən s sətrində təkrarlasaq, a saxlaya bilərik mübarizə bir qrupa əlavə edilmiş simvol sayının sayını saxlayır. Hər an 'k' -ə bərabər olarsa, sıfıra qaytara bilərik. Bu şəkildə yeni sətirdə elementləri əlavə etməyə davam edirik və geri qaytarmadan əvvəl əmri bərpa etmək üçün tərsinə çeviririk.
Lisenziya Açarını Formatlaşdırma Leetcode həllinin tətbiqi
C ++ Proqramı
#include <bits/stdc++.h> using namespace std; string licenseKeyFormatting(string s , int k) { string ans; int cnt = 0 , n = s.size(); for(int i = n - 1 ; i >= 0 ; i--) { if(s[i] != '-') { if(cnt == k) { ans += '-'; cnt = 0; } cnt++; if(s[i] >= 'a' && s[i] <= 'z') { s[i] += 'A' - 'a'; } ans += s[i]; } } reverse(ans.begin() , ans.end()); return ans; } int main() { string s = "5F3Z-2e-9-w"; int K = 4; cout << licenseKeyFormatting(s, K) << endl; return 0; }
Java Proqramı
import java.lang.*; import java.io.*; import java.util.*; class license_key { public static void main(String args[]) { String s = "5F3Z-2e-9-w"; int K = 4; System.out.println(licenseKeyFormatting(s , K)); } public static String licenseKeyFormatting(String s , int k) { StringBuilder ans = new StringBuilder(); int cnt = 0 , n = s.length(); char c; for(int i = n - 1 ; i >= 0 ; i--) { c = s.charAt(i); if(c != '-') { if(cnt == k) { ans.append('-'); cnt = 0; } cnt++; if(c >= 'a' && c <= 'z') { c += 'A' - 'a'; } ans.append(c); } } return ans.reverse().toString(); } }
5F3Z-2E9W
Lisenziya Açarının Biçimləndirilməsi Leetcode Çözümünün Mürəkkəbliyinin Təhlili
Zamanın mürəkkəbliyi
O (N), N = simli uzunluq. Sətri bir dəfə təkrarladığımız üçün proqram doğrudur.
Kosmik Mürəkkəblik
O (1), davamlı yaddaş boşluğundan istifadə etdiyimiz üçün.