2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tabula contentorum
Topic I: De communi praepositione longissimum
Quaestio II: Longissima palindrome substring
Quaestio IV: Multiplicatio chordarum
Scribere munus invenire longissimum praepositionem communem in chordarum acie
Si nulla praepositio communis existit, chorda vacua redit""
Exemplum 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
Exemplum II:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
innuere;
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
Constat solum lowercase litterasSolutio in primo
Prima solutio est par- tivae comparationis militaris
ut infra ostende codice:
- class Solution
- {
- public:
- string findCommon(string& s1, string& s2)
- {
- int i = 0;
- //i有可能会出现越界的情况,所以i小于s1s2长度时再循环判断
- while(i < min(s1.size(), s2.size()) && s1[i] == s2[i])
- i++;
- return s1.substr(0, i);
- }
-
- string longestCommonPrefix(vector<string>& strs)
- {
- int n = strs.size();
- //same字符串就是存储最长公共前缀的字符串
- string same = strs[0];
- for(int i = 1; i < n; i++)
- same = findCommon(same, strs[i]);
- return same;
- }
- };
Solutio II
Comparatio unica significat eandem positionem omnium chordarum statim comparare utrum positiones sint eaedem donec characteribus diversis appareant.
Si ex terminis condicionis hic erit, significat certam chordam finiri, tum finiri potest comparatio.
ut infra ostende codice:
- class Solution
- {
- public:
- string longestCommonPrefix(vector<string>& strs)
- {
- int i = 0;
- //以第一个字符串为基准,与其他所有字符串做比较
- for(i = 0; i < strs[0].size(); i++)
- {
- //ch表示第一个字符串当前循环到的字符
- char ch = strs[0][i];
- //循环strs中其余的字符串,其余字符串的i位置字符与ch做比较
- for(int j = 1; j < strs.size(); j++)
- {
- //如果i大于当前字符串的长度,说明当前字符串已经没有元素了
- if(i > strs[j].size() || strs[j][i] != ch)
- return strs[0].substr(0, i);
- }
- }
- return strs[0];
- }
- };
Da tibi filums
, Convertere usques
Longissimum palindrome substring in
Exemplum 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
Exemplum II:
输入:s = "cbbd" 输出:"bb"
Vis ordinaria recensendi algorithmus duos indices ponit, unum i et unum j, fig i, et j retrorsum movendum. Quoties j movetur, necesse est ut chorda inter i et j substringatur. j movetur. integra vis enumerationis temporis Complexus est algoritas, attingens O(N^3).
Solutio: Centrum expansio algorithmus
Expansio algorithmus centrum est;
Figet centrum punctum
Satus a centro puncto et ad utramque partem expand (pariter impar et par longitudinum considerari oportet)
Hoc est, punctum centrale i singulis temporibus figitur, et quoties ad sinistram et dextram ipsius i dilatatur, an sit palindromus chorda. et directio nidificata est ad dextram ipsius i. .
Quod notandum est secundum centrum dilatationis algorithmi punctum. relictum esse per i situm et rectum esse ad i + 1 . situm, et deinde movere sinistrum et dextrum
Notandum est quod longitudo in codice est dextra et sinistra 1, quia si sinistra et dextra current in eodem elemento, necesse est mutare sinistrum, dextrum ++ , sic magis sunt dextrae et dextrae quam chordae palindromae. Movit unum locum, sic longitudo a dextra laevaque computatur 1. Vide figuram infra ad singula.
Ut in figura supra, sinistro et dextro puncto ad punctum currente ut exit ansa, sic longitudo palindromi substring aa est;
dextra - sinistra - 1 = 3 - 0 - 1 = 2
ut infra ostende codice:
- class Solution
- {
- public:
- string longestPalindrome(string s)
- {
- if(s.size() == 1) return s;
- int n = s.size(), begin = 0, size = 0;
- for(int i = 0; i < n; i++)
- {
- //先做奇数长度的扩展
- int left = i, right = i;
- //left和right符合条件,且指向元素相等再进入循环
- while(left >= 0 && right < n && s[left] == s[right])
- {
- --left;
- ++right;
- }
- //如果长度更大,更新begin与size
- if((right - left - 1) > size)
- {
- size = right - left - 1;
- begin = left + 1;
- }
- //再做偶数长度的扩展
- left = i, right = i + 1;
- //left和right符合条件,且指向元素相等再进入循环
- while(left >= 0 && right < n && s[left] == s[right])
- {
- --left;
- ++right;
- }
- //如果长度更大,更新begin与size
- if((right - left - 1) > size)
- {
- size = right - left - 1;
- begin = left + 1;
- }
- }
- return s.substr(begin, size);
- }
- };
Da tibi duas chordas binariia
etb
regredientes summam chorda binaria.
Exemplum 1:
输入:a = "11", b = "1" 输出:"100"
Exemplum II:
输入:a = "1010", b = "1011" 输出:"10101"
Haec quaestio est de summa praecisione computandi additionem, operationem simulationem faciendo, processum calculi verticalis simulans.
Indicibus duobus, cur1 et cur2, duobus chordis respective designare debes, et t variabilem tum gesturum repraesentare constitue.
ut infra ostende codice:
- class Solution
- {
- public:
- string addBinary(string a, string b)
- {
- //t表示相加后的进位
- int t = 0;
- string ret;
- int cur1 = a.size()-1, cur2 = b.size()-1;
- //cur1或cur2 >= 0表示字符串没遍历完,t>0表示还剩一个进位
- while(cur1 >= 0 || cur2 >= 0 || t)
- {
- if(cur1 >= 0) t += a[cur1--] - '0';
- if(cur2 >= 0) t += b[cur2--] - '0';
- ret += to_string(t % 2);
- t /= 2;
- }
- //从后向前加的,刚好反过来了,需要逆置
- reverse(ret.begin(), ret.end());
- return ret;
- }
- };
Datis duobus integris non-negans repraesentatur chordisnum1
etnum2
, Redinum1
etnum2
Productum, eorum productum etiam in forma chordae exprimitur.
Animadverte:Non potes uti aliquo ex bibliothecis BigInteger constructis vel directo initus ad integrum convertere.
Exemplum 1:
输入: num1 = "2", num2 = "3" 输出: "6"
Exemplum II:
输入: num1 = "123", num2 = "456" 输出: "56088"
Solutio I: Simulate operationes verticales
In mathematicis est forma verticalis multiplicationis columnae.
Ut sequitur:
Intelligi potest, ut, quodlibet digiti sequentis 456 multiplicatur per supra 123, et postea additur, tria singularia sunt;
Summus ordo multiplicatio oportet impleri 0, ob unam particulam perperam additam 738 et 615, quod intelligi potest pro 738 + 6150 .
Processus ducit 0condicio 123×0 occurrere potest, quo in casu respondetur 000 ac agendum est.
Attende ad ordinem calculi eventusquia calculus fit ordine retrogrado, & multiplicatio calculi ex ultimi digiti.
Sed haec methodus facile non est codicem scribere.
Solutio Duo: Optimize Solutio One
Multiplica sine porta et adde, et porta in ultimo passu discursum est:
Id est, quantumcumque multiplicatur, non erit portatio, et portabitur post finalem additionem.
Similiter, calculus incipiens, primum ordinem retexam. Cum multiplicatio duorum digitorum sit, repraesentatio chorda adhiberi non potest
Cum praeposterus ordo sit, subscriptio respondet 123 2,1,0, et subscriptum 456 respondet etiam 2,1,0.
Regula utilissima est: multiplicantur numeri subscripti per i et j, et evenit ut ponatur i+jth positione ordinatae.
① Definire aciem tmp cum longitudine ipsius m + n - 1 (m et n longitudinibus duorum numerorum multiplicatorum respondentium)
Subscripta duorum numerorum multiplicatorum sunt respective i et j, et effectus calculi ponuntur in i+jth positione ordinatae.
Post ultimam additionem, porta eget ut discursum est
Processing ducens 0
ut infra ostende codice:
- class Solution
- {
- public:
- string multiply(string num1, string num2)
- {
- //先逆序两个字符串
- reverse(num1.begin(), num1.end());
- reverse(num2.begin(), num2.end());
- //定义一个数组tmp
- int m = num1.size(), n = num2.size();
- vector<int> tmp(m + n - 1);
- //无进位相乘然后相加
- for(int i = 0; i < m; i++)
- for(int j = 0; j < n; j++)
- tmp[i + j] += (num1[i] - '0') * (num2[j] - '0');
- //处理进位
- string ret;
- int t = 0, cur = 0;
- while(cur < m + n - 1 || t != 0)
- {
- if(cur < m + n - 1) t += tmp[cur++];
- ret += to_string(t % 10);
- t /= 10;
- }
- if(t) ret += to_string(t);
- //处理前置0
- while(ret.back() == '0' && ret.size() > 1) ret.pop_back();
- reverse(ret.begin(), ret.end());
-
- return ret;
- }
- };
Hoc filum relatas quaestiones