AE
Size: a a a
AE
A(
AE
private static int[] zFucntion(String s) {
int n = s.length();
int z[] = new int[n];
for (int i = 1, l = 0, r = 0; i < n; ++i) {
if (i <= r) {
z[i] = Math.min(r - i + 1, z[i - l]);
}
while (i + z[i] < n && s.split("")[z[i]].equals(s.split("")[i + z[i]])) {
++z[i];
}
if (i + z[i] - 1 > r) {
l = i;
r = i + z[i] - 1;
}
}
return z;
}
private static final File inputFile = new File("input.txt");
private static final File outputFile = new File("output.txt");
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
String data;
try {
while ((data = input.readLine()) != null) {
int[] prefixes = zFucntion(data);
StringBuilder outputData = new StringBuilder();
for (int i = 1; i < prefixes.length; i++) {
outputData.append(prefixes[i]).append(" ");
}
writer.write(outputData.toString().trim() + "\n");
}
} finally {
input.close();
writer.close();
}
}
AE
AD
AE
Ф
SE
Ф
m
ML
V🇺
private static int[] zFucntion(String s) {
int n = s.length();
int z[] = new int[n];
for (int i = 1, l = 0, r = 0; i < n; ++i) {
if (i <= r) {
z[i] = Math.min(r - i + 1, z[i - l]);
}
while (i + z[i] < n && s.split("")[z[i]].equals(s.split("")[i + z[i]])) {
++z[i];
}
if (i + z[i] - 1 > r) {
l = i;
r = i + z[i] - 1;
}
}
return z;
}
private static final File inputFile = new File("input.txt");
private static final File outputFile = new File("output.txt");
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
String data;
try {
while ((data = input.readLine()) != null) {
int[] prefixes = zFucntion(data);
StringBuilder outputData = new StringBuilder();
for (int i = 1; i < prefixes.length; i++) {
outputData.append(prefixes[i]).append(" ");
}
writer.write(outputData.toString().trim() + "\n");
}
} finally {
input.close();
writer.close();
}
}
AE
EZ
i
i
Д🍋
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& nums) {
// Time Complexity: O(n log n)
// Space Complexity: O(n)
map<pair<int, int>, int> diagonals;
// nums[i][j] is located at position j on the (i+j)-th diagonal
for (int i = 0; i < nums.size(); ++i)
for (int j = 0; j < nums[i].size(); ++j)
diagonals[{i + j, j}] = nums[i][j];
vector<int> ans;
for (const auto& [k, v]: diagonals) ans.emplace_back(v);
return ans;
}
};
Д🍋