style: enable StaticVariableName
in checkstyle (#5173)
* style: enable StaticVariableName in checkstyle * Refractored: enable StaticVariableName in checkstyle * style: mark more variables as `final` --------- Co-authored-by: vaibhav <vaibhav.waghmare@techprescient.com> Co-authored-by: vil02 <vil02@o2.pl>
This commit is contained in:
parent
160742104d
commit
44ce6e7b0d
@ -115,7 +115,7 @@
|
|||||||
<!-- TODO <module name="MethodName"/> -->
|
<!-- TODO <module name="MethodName"/> -->
|
||||||
<module name="PackageName"/>
|
<module name="PackageName"/>
|
||||||
<!-- TODO <module name="ParameterName"/> -->
|
<!-- TODO <module name="ParameterName"/> -->
|
||||||
<!-- TODO <module name="StaticVariableName"/> -->
|
<module name="StaticVariableName"/>
|
||||||
<!-- TODO <module name="TypeName"/> -->
|
<!-- TODO <module name="TypeName"/> -->
|
||||||
|
|
||||||
<!-- Checks for imports -->
|
<!-- Checks for imports -->
|
||||||
|
@ -8,7 +8,7 @@ package com.thealgorithms.ciphers;
|
|||||||
public class DES {
|
public class DES {
|
||||||
|
|
||||||
private String key;
|
private String key;
|
||||||
private String[] subKeys;
|
private final String[] subKeys;
|
||||||
|
|
||||||
private void sanitize(String key) {
|
private void sanitize(String key) {
|
||||||
int length = key.length();
|
int length = key.length();
|
||||||
@ -32,48 +32,48 @@ public class DES {
|
|||||||
this.key = key;
|
this.key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Permutation table to convert initial 64 bit key to 56 bit key
|
// Permutation table to convert initial 64-bit key to 56 bit key
|
||||||
private static int[] PC1 = {57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4};
|
private static final int[] PC1 = {57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4};
|
||||||
|
|
||||||
// Lookup table used to shift the initial key, in order to generate the subkeys
|
// Lookup table used to shift the initial key, in order to generate the subkeys
|
||||||
private static int[] KEY_SHIFTS = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
|
private static final int[] KEY_SHIFTS = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
|
||||||
|
|
||||||
// Table to convert the 56 bit subkeys to 48 bit subkeys
|
// Table to convert the 56 bit subkeys to 48 bit subkeys
|
||||||
private static int[] PC2 = {14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32};
|
private static final int[] PC2 = {14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32};
|
||||||
|
|
||||||
// Initial permutatation of each 64 but message block
|
// Initial permutation of each 64 but message block
|
||||||
private static int[] IP = {58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7};
|
private static final int[] IP = {58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7};
|
||||||
|
|
||||||
// Expansion table to convert right half of message blocks from 32 bits to 48 bits
|
// Expansion table to convert right half of message blocks from 32 bits to 48 bits
|
||||||
private static int[] expansion = {32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1};
|
private static final int[] EXPANSION = {32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1};
|
||||||
|
|
||||||
// The eight substitution boxes are defined below
|
// The eight substitution boxes are defined below
|
||||||
private static int[][] s1 = {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}};
|
private static final int[][] S1 = {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}};
|
||||||
|
|
||||||
private static int[][] s2 = {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}};
|
private static final int[][] S2 = {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}};
|
||||||
|
|
||||||
private static int[][] s3 = {{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}};
|
private static final int[][] S3 = {{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}};
|
||||||
|
|
||||||
private static int[][] s4 = {{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}};
|
private static final int[][] S4 = {{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}};
|
||||||
|
|
||||||
private static int[][] s5 = {{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}};
|
private static final int[][] S5 = {{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}};
|
||||||
|
|
||||||
private static int[][] s6 = {{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}};
|
private static final int[][] S6 = {{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}};
|
||||||
|
|
||||||
private static int[][] s7 = {{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}};
|
private static final int[][] S7 = {{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}};
|
||||||
|
|
||||||
private static int[][] s8 = {{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}};
|
private static final int[][] S8 = {{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}};
|
||||||
|
|
||||||
private static int[][][] s = {s1, s2, s3, s4, s5, s6, s7, s8};
|
private static final int[][][] S = {S1, S2, S3, S4, S5, S6, S7, S8};
|
||||||
|
|
||||||
// Permutation table, used in the feistel function post s-box usage
|
// Permutation table, used in the Feistel function post s-box usage
|
||||||
static int[] permutation = {16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25};
|
static final int[] PERMUTATION = {16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25};
|
||||||
|
|
||||||
// Table used for final inversion of the message box after 16 rounds of Feistel Function
|
// Table used for final inversion of the message box after 16 rounds of Feistel Function
|
||||||
static int[] IPinverse = {40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25};
|
static final int[] IP_INVERSE = {40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25};
|
||||||
|
|
||||||
private String[] getSubkeys(String originalKey) {
|
private String[] getSubkeys(String originalKey) {
|
||||||
StringBuilder permutedKey = new StringBuilder(); // Initial permutation of keys via PC1
|
StringBuilder permutedKey = new StringBuilder(); // Initial permutation of keys via pc1
|
||||||
int i, j;
|
int i, j;
|
||||||
for (i = 0; i < 56; i++) {
|
for (i = 0; i < 56; i++) {
|
||||||
permutedKey.append(originalKey.charAt(PC1[i] - 1));
|
permutedKey.append(originalKey.charAt(PC1[i] - 1));
|
||||||
@ -91,7 +91,7 @@ public class DES {
|
|||||||
D0 = Dn;
|
D0 = Dn;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let us shrink the keys to 48 bits (well, characters here) using PC2
|
// Let us shrink the keys to 48 bits (well, characters here) using pc2
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
String key = subKeys[i];
|
String key = subKeys[i];
|
||||||
permutedKey.setLength(0);
|
permutedKey.setLength(0);
|
||||||
@ -137,7 +137,7 @@ public class DES {
|
|||||||
int i;
|
int i;
|
||||||
StringBuilder expandedKey = new StringBuilder();
|
StringBuilder expandedKey = new StringBuilder();
|
||||||
for (i = 0; i < 48; i++) {
|
for (i = 0; i < 48; i++) {
|
||||||
expandedKey.append(messageBlock.charAt(expansion[i] - 1));
|
expandedKey.append(messageBlock.charAt(EXPANSION[i] - 1));
|
||||||
}
|
}
|
||||||
String mixedKey = XOR(expandedKey.toString(), key);
|
String mixedKey = XOR(expandedKey.toString(), key);
|
||||||
StringBuilder substitutedString = new StringBuilder();
|
StringBuilder substitutedString = new StringBuilder();
|
||||||
@ -147,13 +147,13 @@ public class DES {
|
|||||||
String block = mixedKey.substring(i, i + 6);
|
String block = mixedKey.substring(i, i + 6);
|
||||||
int row = (block.charAt(0) - 48) * 2 + (block.charAt(5) - 48);
|
int row = (block.charAt(0) - 48) * 2 + (block.charAt(5) - 48);
|
||||||
int col = (block.charAt(1) - 48) * 8 + (block.charAt(2) - 48) * 4 + (block.charAt(3) - 48) * 2 + (block.charAt(4) - 48);
|
int col = (block.charAt(1) - 48) * 8 + (block.charAt(2) - 48) * 4 + (block.charAt(3) - 48) * 2 + (block.charAt(4) - 48);
|
||||||
String substitutedBlock = pad(Integer.toBinaryString(s[i / 6][row][col]), 4);
|
String substitutedBlock = pad(Integer.toBinaryString(S[i / 6][row][col]), 4);
|
||||||
substitutedString.append(substitutedBlock);
|
substitutedString.append(substitutedBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder permutedString = new StringBuilder();
|
StringBuilder permutedString = new StringBuilder();
|
||||||
for (i = 0; i < 32; i++) {
|
for (i = 0; i < 32; i++) {
|
||||||
permutedString.append(substitutedString.charAt(permutation[i] - 1));
|
permutedString.append(substitutedString.charAt(PERMUTATION[i] - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return permutedString.toString();
|
return permutedString.toString();
|
||||||
@ -178,7 +178,7 @@ public class DES {
|
|||||||
String combinedBlock = R0 + L0; // Reverse the 16th block
|
String combinedBlock = R0 + L0; // Reverse the 16th block
|
||||||
permutedMessage.setLength(0);
|
permutedMessage.setLength(0);
|
||||||
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
||||||
permutedMessage.append(combinedBlock.charAt(IPinverse[i] - 1));
|
permutedMessage.append(combinedBlock.charAt(IP_INVERSE[i] - 1));
|
||||||
}
|
}
|
||||||
return permutedMessage.toString();
|
return permutedMessage.toString();
|
||||||
}
|
}
|
||||||
|
@ -10,13 +10,13 @@ public final class FordFulkerson {
|
|||||||
|
|
||||||
static final int INF = 987654321;
|
static final int INF = 987654321;
|
||||||
// edges
|
// edges
|
||||||
static int V;
|
static int vertexCount;
|
||||||
static int[][] capacity, flow;
|
static int[][] capacity, flow;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
System.out.println("V : 6");
|
System.out.println("Vertex Count : 6");
|
||||||
V = 6;
|
vertexCount = 6;
|
||||||
capacity = new int[V][V];
|
capacity = new int[vertexCount][vertexCount];
|
||||||
|
|
||||||
capacity[0][1] = 12;
|
capacity[0][1] = 12;
|
||||||
capacity[0][3] = 13;
|
capacity[0][3] = 13;
|
||||||
@ -32,11 +32,11 @@ public final class FordFulkerson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int networkFlow(int source, int sink) {
|
private static int networkFlow(int source, int sink) {
|
||||||
flow = new int[V][V];
|
flow = new int[vertexCount][vertexCount];
|
||||||
int totalFlow = 0;
|
int totalFlow = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
Vector<Integer> parent = new Vector<>(V);
|
Vector<Integer> parent = new Vector<>(vertexCount);
|
||||||
for (int i = 0; i < V; i++) {
|
for (int i = 0; i < vertexCount; i++) {
|
||||||
parent.add(-1);
|
parent.add(-1);
|
||||||
}
|
}
|
||||||
Queue<Integer> q = new LinkedList<>();
|
Queue<Integer> q = new LinkedList<>();
|
||||||
@ -45,7 +45,7 @@ public final class FordFulkerson {
|
|||||||
while (!q.isEmpty() && parent.get(sink) == -1) {
|
while (!q.isEmpty() && parent.get(sink) == -1) {
|
||||||
int here = q.peek();
|
int here = q.peek();
|
||||||
q.poll();
|
q.poll();
|
||||||
for (int there = 0; there < V; ++there) {
|
for (int there = 0; there < vertexCount; ++there) {
|
||||||
if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) {
|
if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) {
|
||||||
q.add(there);
|
q.add(there);
|
||||||
parent.set(there, here);
|
parent.set(there, here);
|
||||||
|
@ -11,15 +11,15 @@ public final class RabinKarp {
|
|||||||
private RabinKarp() {
|
private RabinKarp() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Scanner SCANNER = null;
|
public static Scanner scanner = null;
|
||||||
public static final int ALPHABET_SIZE = 256;
|
public static final int ALPHABET_SIZE = 256;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SCANNER = new Scanner(System.in);
|
scanner = new Scanner(System.in);
|
||||||
System.out.println("Enter String");
|
System.out.println("Enter String");
|
||||||
String text = SCANNER.nextLine();
|
String text = scanner.nextLine();
|
||||||
System.out.println("Enter pattern");
|
System.out.println("Enter pattern");
|
||||||
String pattern = SCANNER.nextLine();
|
String pattern = scanner.nextLine();
|
||||||
|
|
||||||
int q = 101;
|
int q = 101;
|
||||||
searchPat(text, pattern, q);
|
searchPat(text, pattern, q);
|
||||||
|
@ -5,13 +5,13 @@ package com.thealgorithms.others;
|
|||||||
*/
|
*/
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
// An implementaion of string matching using finite automata
|
// An implementation of string matching using finite automata
|
||||||
public final class StringMatchFiniteAutomata {
|
public final class StringMatchFiniteAutomata {
|
||||||
private StringMatchFiniteAutomata() {
|
private StringMatchFiniteAutomata() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final int CHARS = 256;
|
public static final int CHARS = 256;
|
||||||
public static int[][] FA;
|
public static int[][] fa;
|
||||||
public static Scanner scanner = null;
|
public static Scanner scanner = null;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -30,13 +30,13 @@ public final class StringMatchFiniteAutomata {
|
|||||||
int m = pat.length();
|
int m = pat.length();
|
||||||
int n = text.length();
|
int n = text.length();
|
||||||
|
|
||||||
FA = new int[m + 1][CHARS];
|
fa = new int[m + 1][CHARS];
|
||||||
|
|
||||||
computeFA(pat, m, FA);
|
computeFA(pat, m, fa);
|
||||||
|
|
||||||
int state = 0;
|
int state = 0;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
state = FA[state][text.charAt(i)];
|
state = fa[state][text.charAt(i)];
|
||||||
|
|
||||||
if (state == m) {
|
if (state == m) {
|
||||||
System.out.println("Pattern found at index " + (i - m + 1));
|
System.out.println("Pattern found at index " + (i - m + 1));
|
||||||
@ -44,11 +44,11 @@ public final class StringMatchFiniteAutomata {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Computes finite automata for the partern
|
// Computes finite automata for the pattern
|
||||||
public static void computeFA(String pat, int m, int[][] FA) {
|
public static void computeFA(String pat, int m, int[][] fa) {
|
||||||
for (int state = 0; state <= m; ++state) {
|
for (int state = 0; state <= m; ++state) {
|
||||||
for (int x = 0; x < CHARS; ++x) {
|
for (int x = 0; x < CHARS; ++x) {
|
||||||
FA[state][x] = getNextState(pat, m, state, x);
|
fa[state][x] = getNextState(pat, m, state, x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user