Any language (or pseudo-code) is fine.
Edited by Roger, 23 August 2010 - 08:45 AM.
added order N.
Edited by Roger, 23 August 2010 - 08:45 AM.
added order N.
.
|
|
|
.
foreach Char in A
foreach Char2 in B
if ( Char == Char2 ) print Char;
(need to eliminate dups though)
let b_i 0
let a_i 0
while ( a_i < length(A) && b_i < length(B))
{
if( A_{a_i} == B_{b_i} ) {
output A_{a_i}
let curChar A_{a_i}
while ( B_{b_i}==curChar && b_i<length(B) ) increment b_i;
while ( A_{a_i}==curChar && a_i<length(A)) increment a_i;
} else {
increment a_i;
}
}
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a: ");
string a = Console.ReadLine();
Console.Write("Enter b: ");
string b = Console.ReadLine();
int range = (int)char.MaxValue - (int)char.MinValue + 1;
Dictionary<char, int> count = new Dictionary<char, int>();
char[] arrayA = a.ToCharArray();
char[] arrayB = b.ToCharArray();
for (int i = 0; i < arrayB.Length; i++)
{
if (count.ContainsKey(arrayB[i]))
count[arrayB[i]]++;
else
count[arrayB[i]] = 1;
}
Console.Write("Common substring: '");
for (int i = 0; i < arrayA.Length; i++)
{
if (count.ContainsKey(arrayA[i]) && count[arrayA[i]] > 0)
{
Console.Write(arrayA[i]);
count[arrayA[i]]--;
}
}
Console.WriteLine("'");
// Now O(n^2) solution
Console.Write("Common substring: '");
for (int i = 0; i < arrayA.Length; i++)
{
int k = 0;
for (int j = 0; j <= i; j++)
if (arrayA[j] == arrayA[i])
k++;
for (int j = 0; j < arrayB.Length; j++)
if (arrayB[j] == arrayA[i])
k--;
if (k <= 0)
Console.Write(arrayA[i]);
}
Console.WriteLine("'");
}
}
}