Longest substrings without repeating characters: Difference between revisions
Content added Content deleted
No edit summary |
(Ada version) |
||
Line 127: | Line 127: | ||
Input: "" |
Input: "" |
||
Result: [] |
Result: [] |
||
</pre> |
|||
=={{header|Ada}}== |
|||
<lang Ada>with Ada.Text_IO; |
|||
procedure Longest_Substring is |
|||
function Longest (Item : String) return String is |
|||
Hist : array (Character) of Natural := (others => 0); |
|||
First : Natural := Item'First; |
|||
Last : Natural := Item'First - 1; |
|||
Longest_First : Natural := Item'First; |
|||
Longest_Last : Natural := Item'First - 1; |
|||
procedure Adjust is |
|||
begin |
|||
if Last - First > Longest_Last - Longest_First then |
|||
Longest_First := First; |
|||
Longest_Last := Last; |
|||
end if; |
|||
end Adjust; |
|||
begin |
|||
if Item = "" then |
|||
return Item; |
|||
end if; |
|||
for Index in Item'Range loop |
|||
Last := Index; |
|||
Hist (Item (Index)) := Hist (Item (Index)) + 1; |
|||
if Hist (Item (Index)) = 1 then |
|||
Adjust; |
|||
else |
|||
for A in First .. Index loop |
|||
if (for all E of Hist => E <= 1) then |
|||
First := A; |
|||
Adjust; |
|||
exit; |
|||
end if; |
|||
Hist (Item (A)) := Hist (Item (A)) - 1; |
|||
end loop; |
|||
end if; |
|||
end loop; |
|||
return Item (Longest_First .. Longest_Last); |
|||
end Longest; |
|||
procedure Test (Item : String) is |
|||
use Ada.Text_IO; |
|||
begin |
|||
Put ("original : '"); Put (Item); Put_Line ("'"); |
|||
Put ("longest : '"); Put (Longest (Item)); Put_Line ("'"); |
|||
end Test; |
|||
begin |
|||
Test (""); |
|||
Test ("a"); |
|||
Test ("xyzyabcybdfd"); |
|||
Test ("thisisastringtest"); |
|||
Test ("zzzzz"); |
|||
end Longest_Substring;</lang> |
|||
{{out}} |
|||
<pre> |
|||
original : '' |
|||
longest : '' |
|||
original : 'a' |
|||
longest : 'a' |
|||
original : 'xyzyabcybdfd' |
|||
longest : 'zyabc' |
|||
original : 'thisisastringtest' |
|||
longest : 'astring' |
|||
original : 'zzzzz' |
|||
longest : 'z' |
|||
</pre> |
</pre> |
||