<!DOCTYPE html>
	<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
	<head>
<title>Đoạn max | Câu 2 - Đề thi HSG tin 12 Nghệ An | Năm 2013-2014</title>
<meta name="description" content="Đoạn max | Câu 2 - Đề thi HSG tin 12 Nghệ An | Năm 2013-2014 - Savefile - Tin tức -...">
<meta name="author" content="BÀI TẬP Ở NHÀ">
<meta name="copyright" content="BÀI TẬP Ở NHÀ [ducluu80@gmail.com]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index, archive, follow, noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="content-language" content="vi">
<meta property="og:title" content="Đoạn max | Câu 2 - Đề thi HSG tin 12 Nghệ An | Năm 2013-2014">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin tức - https&#x3A;&#x002F;&#x002F;baitaponha.com&#x002F;savefile&#x002F;boi-gioi-tin-hoc&#x002F;doan-max-cau-2-de-thi-hsg-tin-12-nghe-an-nam-2013-2014-41.html">
<meta property="og:site_name" content="BÀI TẬP Ở NHÀ">
<meta property="og:url" content="https://baitaponha.com/savefile/boi-gioi-tin-hoc/doan-max-cau-2-de-thi-hsg-tin-12-nghe-an-nam-2013-2014-41.html">
<link rel="shortcut icon" href="https://baitaponha.com/uploads/logo.ico">
<link rel="canonical" href="https://baitaponha.com/savefile/boi-gioi-tin-hoc/doan-max-cau-2-de-thi-hsg-tin-12-nghe-an-nam-2013-2014-41.html">
<link rel="alternate" href="https://baitaponha.com/rss/" title="Tin tức" type="application/rss+xml">
<link rel="alternate" href="https://baitaponha.com/rss/lap-trinh-python-co-ban/" title="Tin tức - Lập trình Python cơ bản." type="application/rss+xml">
<link rel="alternate" href="https://baitaponha.com/rss/giai-de-tin-hoc/" title="Tin tức - Giải đề tin học" type="application/rss+xml">
<link rel="alternate" href="https://baitaponha.com/rss/boi-gioi-tin-hoc/" title="Tin tức - Bồi giỏi tin học" type="application/rss+xml">
<link rel="alternate" href="https://baitaponha.com/rss/lap-trinh-c/" title="Tin tức - Lập trình C++" type="application/rss+xml">
<link rel="alternate" href="https://baitaponha.com/rss/thu-thuat-may-tinh/" title="Tin tức - Thủ thuật máy tính" type="application/rss+xml">
<link rel="preload" as="style" href="https://baitaponha.com/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/custom.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/style-green.css" type="text/css">
<link rel="preload" as="style" href="https://baitaponha.com/themes/egov/css/news.css" type="text/css">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/assets/js/jquery/jquery.cookie.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/themes/egov/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/themes/egov/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.googletagmanager.com/gtag/js?id=G-4JBZJ8SEPL" type="text/javascript">
<link rel="preload" as="script" href="https://baitaponha.com/themes/egov/js/bootstrap.min.js" type="text/javascript">
<link rel="StyleSheet" href="https://baitaponha.com/assets/css/font-awesome.min.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/bootstrap.non-responsive.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/style.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/custom.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/style-green.css">
<link rel="StyleSheet" href="https://baitaponha.com/themes/egov/css/news.css">
<style type="text/css">
	body{background: #fff;}
</style>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3247389617576546"
     crossorigin="anonymous"></script>
     <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-4JBZJ8SEPL"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-4JBZJ8SEPL');
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-W4C9RPT');</script>
<!-- End Google Tag Manager -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-6V0WCB5SCB"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-6V0WCB5SCB');
</script>
<script async custom-element="amp-auto-ads"
        src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js">
</script>		
<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-262364265-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-262364265-1');
</script>
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-262364265-1', '.baitaponha.com');
ga('send', 'pageview');
</script>
</head>
	<body>
	    <amp-auto-ads type="adsense"
                    data-ad-client="ca-pub-3247389617576546">
        </amp-auto-ads>
<!-- BEGIN Fanpage Facebook -->
<div id="fb-root"></div>
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/vi_VN/sdk.js#xfbml=1&version=v16.0&appId=390459604647856&autoLogAppEvents=1" nonce="H8AT1lQt"></script>

<!-- END Fanpage Facebook -->
        <!-- Google Tag Manager (noscript) -->
            <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W4C9RPT"
            height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
        <!-- End Google Tag Manager (noscript) -->
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">BÀI TẬP Ở NHÀ</h2>
		<p class="pull-right"><a title="BÀI TẬP Ở NHÀ" href="https://baitaponha.com/">https://baitaponha.com</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Đoạn max | Câu 2 - Đề thi HSG tin 12 Nghệ An | Năm 2013-2014</h1>
		<ul class="list-inline">
			<li>Thứ ba - 09/05/2023 02:38</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
						<div class="pull-left imghome">
				<img alt="Đoạn max" src="https://baitaponha.com/assets/news/2023_05/doan-max.png" width="100" class="img-thumbnail" />
								<p>
					<em>Đoạn max</em>
				</p>
			</div>
			<h3><strong>Câu 2. Đoạn max (Đề HSG tin 12 Nghệ An năm 2013-2014)</strong></h3>
Đây là câu 2 của đề thi học sinh giỏi cấp tỉnh môn tin học 12 của tỉnh Nghệ An năm học 2013-2014. Câu này đã có độ khó hơn so với câu 1. Đây là câu hỏi liên quan về xử lý xâu kí tự. Tuy là khó hơn nhưng học sinh cũng có thể kiếm điểm tương đối dễ dàng ở câu này. Nếu chạy full test thì học trò có thể được 5 điểm. <span style="color:rgb(155, 89, 182);"><strong>Trong bài này tôi xin trình bày 3 cách giải bằng ngôn ngữ Python, thầy cô và các bạn cùng&nbsp; tham khảo nhé! Trong đó sẽ hiểu thêm về kiểu biến set() - KIỂU BIẾN TẬP HỢP</strong></span>
		</div>
		<div id="bodytext" class="clearfix">
			<h2><strong>ĐỀ RA</strong></h2>

<p><span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Bài 2. (5 điểm) </span></span></b><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">ĐOẠN </span></span></b><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">MAX</span></span></b></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Cho chuỗi kí tự S gồm toàn các chữ cái in hoa (A…Z) với độ dài không vượt quá </span></span><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">10<sup>4</sup></span></span><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">. </span></span></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Yêu cầu: </span></span></b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Hãy tìm đoạn con các kí tự liên tiếp dài nhất sao cho không có kí tự nào xuất hiện nhiều hơn một lần. Trong trường hợp có nhiều hơn một đoạn con có cùng chiều dài dài nhất, hãy chỉ ra đoạn xuất hiện đầu tiên trong chuỗi S.</span></span></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Dữ liệu</span></span></b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">: Vào từ văn bản </span></span><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">DOANMAX</span></span></b><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">.INP</span></span></b><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">: </span></span></b>&nbsp;</span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">- G</span></span><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">ồm một dòng duy nhất chứa chuỗi S.</span></span></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Kết quả</span></span></b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">: Ghi ra file văn bản </span></span><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">DOANMAX</span></span></b><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">.OUT</span></span></b></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">- </span></span></b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Chỉ một dòng duy nhất chứa </span></span><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">số nguyên P</span></span><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif"> và </span></span><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">L tương ứng là vị trí và chiều dài của đoạn con dài nhất tìm được</span></span><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">.</span></span> </span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Ví dụ</span></span></b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">: </span></span></span></span></span></p>

<table class="Table" style="width:369px; margin-left:119px; border-collapse:collapse; border:none" width="369">
	<tbody>
		<tr>
			<td style="border-bottom:1px solid black; width:209px; padding:0cm 7px 0cm 7px; background-color:rgb(217, 217, 217); border-top:1px solid black; border-right:1px solid black; border-left:1px solid black" valign="top">
			<p><span style="font-size:11pt"><span style="line-height:normal"><span style="tab-stops:right 146.2pt"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">DOANMAX</span></span></b><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">.INP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b></span></span></span></span></p>
			</td>
			<td style="border-bottom:1px solid black; width:160px; padding:0cm 7px 0cm 7px; background-color:rgb(217, 217, 217); border-top:1px solid black; border-right:1px solid black; border-left:none" valign="top">
			<p><span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">DOANMAX</span></span></b><b><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">.OUT</span></span></b></span></span></span></p>
			</td>
		</tr>
		<tr>
			<td style="border-bottom:1px solid black; width:209px; padding:0cm 7px 0cm 7px; border-top:none; border-right:1px solid black; border-left:1px solid black" valign="top">
			<p><span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">ABABCDAC</span></span></span></span></span></p>
			</td>
			<td style="border-bottom:1px solid black; width:160px; padding:0cm 7px 0cm 7px; border-top:none; border-right:1px solid black; border-left:none" valign="top">
			<p><span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><span style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">3 4</span></span></span></span></span></p>
			</td>
		</tr>
	</tbody>
</table>

<p><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Lưu ý: </span></span></b><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Có 80% số test có độ dài xâu S không vượt quá 255.</span></span></span></span></span><br />
<span style="font-size:11pt"><span style="line-height:normal"><span style="font-family:Arial,sans-serif"><i><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Giải thích test ví dụ: </span></span></i><span lang="EN-US" style="font-size:12.0pt"><span style="font-family:&#039;Times New Roman&#039;,serif">Đoạn con dài nhất tìm được là ABCD có vị trí 3 và độ dài 4</span></span></span></span></span></p>

<h1>&nbsp;</h1>

<h2><strong>GIẢI</strong></h2>

<h3><strong>Cách 1</strong></h3>

<pre>
<code># Đọc dữ liệu từ file input
f = open(&#039;DOANMAX.INP&#039;, &#039;r&#039;)
s = f.readline().strip()
f.close()

# Tìm đoạn con dài nhất không có kí tự nào xuất hiện nhiều hơn 1 lần
max_len = 0
max_start = 0

for i in range(len(s)):
    chars = set()
    j = i
    while j &lt; len(s) and s&#91;j&#93; not in chars:
        chars.add(s&#91;j&#93;)
        j += 1
    if j-i &gt; max_len:
        max_len = j-i
        max_start = i

# Ghi kết quả vào file output
f = open(&#039;DOANMAX.OUT&#039;, &#039;w&#039;)
f.write(str(max_start+1) + &#039; &#039; + str(max_len))
f.close()</code></pre>

<h3><strong>Giải thích:</strong></h3>

<ul>
	<li>Đầu tiên, chúng ta đọc dữ liệu từ file input bằng cách mở file và đọc dòng đầu tiên bằng hàm <code>readline()</code>.</li>
	<li>Tiếp theo, chúng ta sử dụng vòng lặp để duyệt qua từng vị trí trong chuỗi <code>s</code>. Tại mỗi vị trí đó, chúng ta sử dụng một tập hợp <code>chars</code> để lưu các kí tự đã xuất hiện. Chúng ta duyệt từ vị trí hiện tại đến cuối chuỗi hoặc tới khi gặp một kí tự đã xuất hiện trước đó. Nếu đoạn con này dài hơn đoạn con trước đó, chúng ta cập nhật lại <code>max_len</code> và <code>max_start</code>.</li>
	<li>Cuối cùng, chúng ta ghi kết quả vào file output bằng cách mở file và sử dụng hàm <code>write()</code> để ghi chuỗi kết quả. Lưu ý rằng vì vị trí đếm từ 1 nên chúng ta cộng thêm 1 vào <code>max_start</code> trước khi ghi kết quả.</li>
</ul>

<h2>Cách 2</h2>

<pre>
<code># Đọc input từ file
with open(&quot;DOANMAX.INP&quot;, &quot;r&quot;) as f:
    s = f.read().strip()

n = len(s)
ans_start = 0
ans_len = 0

# Tìm đoạn con dài nhất không có kí tự xuất hiện nhiều hơn 1 lần
for i in range(n):
    # Khởi tạo một mảng đánh dấu các kí tự đã xuất hiện
    appeared = &#91;False&#93; * 26
    for j in range(i, n):
        # Nếu kí tự j đã xuất hiện trước đó thì thoát vòng lặp
        if appeared&#91;ord(s&#91;j&#93;) - ord(&#039;A&#039;)&#93;:
            break
        # Đánh dấu kí tự j đã xuất hiện
        appeared&#91;ord(s&#91;j&#93;) - ord(&#039;A&#039;)&#93; = True
        # Nếu đoạn con hiện tại dài hơn đoạn con tìm được trước đó thì cập nhật lại kết quả
        if j - i + 1 &gt; ans_len:
            ans_start = i
            ans_len = j - i + 1

# Ghi output vào file
with open(&quot;DOANMAX.OUT&quot;, &quot;w&quot;) as f:
    f.write(str(ans_start + 1) + &quot; &quot; + str(ans_len))</code></pre>

<h3><strong>Giải thích:</strong></h3>

<ul>
	<li>Đầu tiên, ta đọc input từ file và lưu vào biến <code>s</code>.</li>
	<li>Tiếp theo, ta duyệt từng vị trí trong chuỗi <code>s</code> và tìm đoạn con dài nhất không có kí tự xuất hiện nhiều hơn 1 lần bắt đầu từ vị trí đó. Để làm được điều này, ta sử dụng một mảng <code>appeared</code> để đánh dấu các kí tự đã xuất hiện trong đoạn con hiện tại. Nếu một kí tự đã xuất hiện trước đó thì ta thoát khỏi vòng lặp và tiếp tục duyệt đến vị trí tiếp theo. Nếu đoạn con hiện tại dài hơn đoạn con tìm được trước đó thì ta cập nhật kết quả.</li>
	<li>Cuối cùng, ta ghi output vào file với định dạng là vị trí đầu tiên của đoạn con và chiều dài của đoạn con dài nhất tìm được. Lưu ý là vị trí đầu tiên trong chuỗi là 1, không phải 0.</li>
	<li><code>if appeared&#91;ord(s&#91;j&#93;) - ord(&#039;A&#039;)&#93;&nbsp;</code> Dòng lệnh này kiểm tra xem ký tự tại vị trí j trong chuỗi s đã xuất hiện trước đó chưa. Biến appeared lưu trữ thông tin về sự xuất hiện của các ký tự. Nếu ký tự đã xuất hiện trước đó, biểu thức trong điều kiện sẽ trả về giá trị True, ngược lại sẽ trả về giá trị False. Để có thể kiểm tra được tất cả các ký tự trong chuỗi s, ta sử dụng hàm ord để chuyển đổi ký tự sang mã ASCII, sau đó trừ đi giá trị mã ASCII của ký tự &#039;A&#039; để thu được một số nguyên nhỏ hơn hoặc bằng 25 (vì có tổng cộng 26 chữ cái trong bảng chữ cái tiếng Anh).</li>
</ul>
&nbsp;

<h2>&nbsp;<strong>Cách 3</strong></h2>
Trong cách này:&nbsp;Để giải quyết bài toán này, chúng ta có thể sử dụng một vòng lặp để duyệt qua từng vị trí trong chuỗi. Tại mỗi vị trí, chúng ta sẽ sử dụng một tập hợp để lưu trữ các kí tự đã xuất hiện và kiểm tra xem đoạn con hiện tại có dài hơn đoạn con dài nhất đã tìm thấy trước đó hay không. Nếu có, chúng ta sẽ cập nhật đoạn con dài nhất và vị trí bắt đầu của nó.

<pre>
<code># Đọc chuỗi S từ file DOANMAX.INP
with open(&#039;DOANMAX.INP&#039;, &#039;r&#039;) as f:
    s = f.readline().strip()

# Khởi tạo biến lưu đoạn con dài nhất và vị trí bắt đầu của nó
max_len = 0
start_pos = 0

# Khởi tạo tập hợp để lưu trữ các kí tự đã xuất hiện
char_set = set()

# Duyệt qua từng vị trí trong chuỗi
for i in range(len(s)):
    # Nếu kí tự hiện tại đã xuất hiện trong đoạn con trước đó
    # hoặc đã xuất hiện trong tập hợp
    if s&#91;i&#93; in char_set:
        # Xóa hết các kí tự trong tập hợp
        char_set.clear()
        # Đặt lại vị trí bắt đầu của đoạn con
        start_pos = i
    # Thêm kí tự hiện tại vào tập hợp
    char_set.add(s&#91;i&#93;)
    # Tính độ dài của đoạn con hiện tại
    curr_len = len(char_set)
    # Nếu đoạn con hiện tại dài hơn đoạn con dài nhất đã tìm thấy trước đó
    if curr_len &gt; max_len:
        # Cập nhật đoạn con dài nhất và vị trí bắt đầu của nó
        max_len = curr_len
        start_pos = i - curr_len + 1

# Ghi kết quả vào file DOANMAX.OUT
with open(&#039;DOANMAX.OUT&#039;, &#039;w&#039;) as f:
    f.write(str(start_pos) + &#039; &#039; + str(max_len))</code></pre>
Sử dụng cách làm trên, chúng ta có thể tìm được đoạn con các kí tự liên tiếp dài nhất trong chuỗi S mà không có kí tự nào xuất hiện nhiều hơn một lần và ghi kết quả vào file DOANMAX.OUT.

<h2><strong>CÁC TEST</strong></h2>
Đã thêm các test cuối bài viết, thầy cô và các bạn tải về chạy thử nhé!&nbsp;<strong>Trong file tải về đã có thêm các file mẫu bằng code pascal.</strong><br />
&nbsp;
<h2>&nbsp;</h2>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả:</strong>
				<a href="https://baitaponha.com/author/admin/">admin</a>
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://baitaponha.com/savefile/boi-gioi-tin-hoc/doan-max-cau-2-de-thi-hsg-tin-12-nghe-an-nam-2013-2014-41.html" title="Đoạn max | Câu 2 - Đề thi HSG tin 12 Nghệ An | Năm 2013-2014">https://baitaponha.com/savefile/boi-gioi-tin-hoc/doan-max-cau-2-de-thi-hsg-tin-12-nghe-an-nam-2013-2014-41.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; BÀI TẬP Ở NHÀ
		</div>
		<div id="contact">
			<a href="mailto:ducluu80@gmail.com">ducluu80@gmail.com</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://baitaponha.com/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://baitaponha.com/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="btol",nv_check_pass_mstime=21538000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://baitaponha.com/assets/js/language/vi.js"></script>
<script src="https://baitaponha.com/assets/js/DOMPurify/purify3.js"></script>
<script src="https://baitaponha.com/assets/js/global.js"></script>
<script src="https://baitaponha.com/assets/js/site.js"></script>
<script src="https://baitaponha.com/themes/default/js/news.js"></script>
<script src="https://baitaponha.com/assets/js/jquery/jquery.cookie.js"></script>
<script src="https://baitaponha.com/themes/egov/js/main.js"></script>
<script src="https://baitaponha.com/themes/egov/js/custom.js"></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-4JBZJ8SEPL"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date);gtag('config','G-4JBZJ8SEPL');</script>
<script src="https://baitaponha.com/themes/egov/js/bootstrap.min.js"></script>
</body>
</html>