Mündəricat
Problem bəyanat
Bu problemdə bizə (0-9) və '#' rəqəmlərini ehtiva edən bir sətir verilir. Aşağıdakı xəritələşdirmədən istifadə edərək bu sətri kiçik ingilis hərflərinin sətirinə çevirməliyik.
misal
s = "10#11#12"
"jkab"
Explanation:
“10 #” -> “j”, “11 #” -> “k”, “1” -> “a”, “2” -> “b”.
s = "1326#"
"acz"
Explanation:
“1” -> “a”, “3” -> “c”, “26 #” -> “z”.
Yanaşma
Sadəcə '#' ilə maraqlanmalı olduğumuzu görə bilərik. Verilən sətri sayğacdan istifadə edərək soldan sağa keçək (icazə verin i), onda hər bir indeks üçün (0 <= i <= n-3), i-dən sonrakı indeksin yanındakı işarənin olub olmadığını yoxlamalıyıq. yəni i + 2 indeksindəki simvol '#' dir.
Hər bir i üçün (0-dan n-3-ə), i + 2 indeksindəki simvol '#' olduqda, bu i indeksini i + 1 ilə birləşdirin və bu iki rəqəmdən istifadə edərək bir simvol yaradın.
məsələn “12 #”, sətri soldan sağa keçirsək, i = 0 olduqda i + 2 indeksindəki simvolun '#' olduğunu görürük. Beləliklə, i və i + 1 indekslərində mövcud olan rəqəmləri birləşdirin, yəni 1 və 2 rəqəmlərini birləşdirin, onları “12” edin. İndi 12 nişanını “l” işarəsinə çevirin və əlavə edin sim qurucusu sb
“12” sətirini “l” simvoluna çevirmək üçün sıra formatında bir sıra götürən və uyğun işarəyə çevirən çevirmə funksiyası yaratdıq.
Əgər i + 2 indeksindəki simvol '#' deyilsə, i indeksindəki i ilə i + 1 indeksindəki simvolları birləşdirməməliyik.
məs. “123”, əgər i = 0 indeksindən görürüksə, i + 2 indeksi, yəni 2-dəki simvol '#' deyil, buna görə cavabımıza yalnız "1" -in simvol çevrilməsini əlavə edəcəyik.
N-2 və n-1 indeksindəki simvol üçün deyə bilərik ki, n-1-dəki char artıq '#' olardısa, indeks n-3-dən sonra döngədən çıxmış olacağıq, başqa hər iki simvol n-2-də və n-1 ayrıca eşlenmelidir.
Həyata keçirilməsi
Əlifbadan Bütöv Xəritəçəkmə Leccode Solution-a şifrəni açmaq üçün C ++ proqramı
#include <bits/stdc++.h> using namespace std; char convert(string str){ stringstream ss(str); int num; ss>>num; return num+96; } string freqAlphabets(string s) { stringstream ss; int i=0; while(i<s.length()-2){ char ch; if(s[i+2]=='#'){ ch=(char)convert(s.substr(i, 2) ); i+=2; }else{ ch=(char)convert(s.substr(i,1)); } i++; ss<<ch; } while(i<s.length()){ char ch=(char)convert(s.substr(i,1)); ss<<ch; i++; } return ss.str(); } int main() { cout << freqAlphabets("1326#") ; }
acz
Əlifbadan bütöv xəritələmə Leetcode həllinə şifrəni açmaq üçün Java proqramı
import java.util.*; import java.lang.*; class Rextester { public static String freqAlphabets(String s) { StringBuilder sb=new StringBuilder(); int i=0; while(i<s.length()-2){ char ch; if(s.charAt(i+2)=='#'){ ch=(char)convert(s.substring(i,i+2)); i+=2; }else{ ch=(char)convert(s.substring(i,i+1)); } i++; sb.append(ch); } while(i<s.length()){ char ch=(char)convert(s.substring(i,i+1)); sb.append(ch); i++; } return sb.toString(); } public static int convert(String str){ int num=Integer.parseInt(str); return num+96; } public static void main(String args[]) { System.out.println(freqAlphabets("10#11#12")); } }
jkab
Əlifbadan Tamamın Xəritəçəkmə Leccode Solution-a dekripti sətri üçün komplekslik analizi
Zamanın mürəkkəbliyi
O (n): Giriş sətrimizi soldan sağa xətti keçdiyimiz üçün O (n) vaxtı alınacaq.
Kosmik Mürəkkəblik
O (n): Java və cpp-də simli axın vəziyyətində bir simli qurucudan istifadə etdik. Ən pis halda uzunluq giriş sətri uzunluğu ilə eyni olardı. Beləliklə, kosmik mürəkkəblik də O (n) -dir.