انظر إلى الكود أولاً
الفئة العامة maxhuiwen {public static void main (string [] args) {// todo method method method string s = "abb" ؛ maxhuiwen (s) ؛ } // 1. الإخراج palindrome سلسلة عامة ثابتة الفراغ maxhuiwen (سلسلة s) {// تخزين طول السلسلة int int = s.length () ؛ // تخزين أطول سلسلة palindrome سلسلة maxString = "" ؛ // قم بإرسال جميع السلاسل الفرعية للسلسلة الحالية لـ (int i = 0 ؛ i <length ؛ i ++) {for (int j = i ؛ j <length+1 ؛ j ++) {string s1 = S.SubString (i ، j) ؛ // إذا كانت السلسلة الحالية عبارة عن سلسلة palindrome وكانت أكبر من طول maxString ، فاستبدل maxstring الحالي إذا (huiwen (s1) && s1.length ()> maxstring.length ()) {maxstring = s1 ؛ } //system.out.println(S1) ؛ }} // إذا كان طول maxString أكبر من أو يساوي 2 ، فهذا يعني أنها سلسلة palindrome if (maxString.Length ()> = 2) {system.out.println (maxString) ؛ } آخر {system.out.println ("no palindrome string") ؛ }} // 2. تحديد ما إذا كانت السلسلة عبارة عن سلسلة من البولين الثابتة الثابتة (سلسلة S) طول int = s.length () ؛ char s1 [] = s.tochararray () ؛ // fore وبعد ، اجتياز السلسلة وقارن عن (int i = 0 ، j = length-1 ؛ i <= j ؛ i ++ ، j-) {if (s1 [i]! = s1 [j]) {flag = false ؛ }} علامة الإرجاع ؛ }}1. الحكم الرعوي من الأوتار
تحديد ما إذا كانت السلسلة هي palindrome
وصف المشكلة ، بالنظر إلى سلسلة ، مثل String t = "Madam" ؛ لتحديد ما إذا كانت السلسلة هي palindrome
الطريقة 1: 1. تحديد مؤشرات عنصر السلسلة (لاحظ أن Java ليس لديها مفهوم المؤشرات) ، int right = t.length ()-1 ؛ int left = 0 ؛
2. وهذا هو ، يبدأ اليسار من اليسار ، ويبدأ اليمين من اليمين ، وقارن ما إذا كانت الأحرف المشار إليها متساوية في التسلسل. إذا كانت متساوية ، اليسار ++ ، يمين-؛ خلاف ذلك ، سيتم إرجاعه مباشرة ، وليس خلفية.
بينما (يسار <يمين) {if (t.charat (يسار)! = t.charat (يمين)) إرجاع خطأ ؛ اليسار ++ ؛ يمين-؛} إرجاع صحيح ؛شفرة:
/ * * 3: * palindrome * وصف المشكلة: يشير Palindrome ، English Palindrome ، إلى سلسلة تقرأ نفس الشيء وعلى عكسي ، مثل السيدة ، أحبني ، * الطريقة 1: التحليل: استخدم "مؤشرتين" للمسح من بداية ونهاية السلسلة على التوالي. إذا كانت القيم التي يشير إليها كل "مؤشر" متساوية ، فهذا هو palindrome*/ public boolean Ispalindrome (سلسلة s) {if (s == null) عودة false ؛ int left = 0 ؛ int right = s.length ()-1 ؛ بينما (يسار <يمين) {if (s.charat (يسار)! = s.charat (يمين)) إرجاع خطأ ؛ اليسار ++ ؛ يمين--؛ } إعادة صواب ؛ } الطريقة 2: سلسلة باستيلار مثل "سيدتي". إذا عكستها جميعًا ، فستظل تحصل على "سيدتي". عند مقارنة السلاسل ، إذا كانت متساوية ، فهي باستيل.
1. تنفيذ وظيفة تنقل السلاسل
/** قم بتنفيذ وظيفة الانقلاب لسلسلة*/ سلسلة خاصة عكسية (String str) {String strresult = "" ؛ لـ (int i = str.length ()-1 ؛ i> = 0 ؛ i-) {strresult+= str.charat (i) ؛ } إرجاع strresult ؛ } 2. بالنسبة للسلسلة المستهدفة s ، قم أولاً بعكس ذلك temp = عكسي (s) ، ثم الحكم على temp.equals (s)/** اقلب السلسلة ، ثم قارنها مع السلسلة الأصلية. إذا كان ذلك متساويًا ، فهو palindrome ، وإلا فإنه ليس * تعقيد وقت الخوارزمية هو o (n) */public boolean ispalindrome2 (سلسلة s) {سلسلة temp = عكس (s) ؛ إذا (s.equals (temp))الثاني: كيفية العثور على أقصى سلسلة palindromic لسلسلة معينة
على سبيل المثال ، بالنظر إلى سلسلة السلسلة t = "Google" ، كيفية العثور على أطول سلسلة من palindrome "goog"
1. إن الأبسط والأكثر المباشرة هو العثور على جميع فرعية من السلسلة ، ثم تحديد ما إذا كان كل فرعية عبارة عن palindrome ، وسجل ، ومقارنة وإيجاد palindrome من الحد الأقصى للطول. * تعقيد وقت الخوارزمية هو o (n^3)
/ * * 4 ، ابحث عن أطول فرعية من Palindrome * الوصف: بالنظر إلى سلسلة ، ابحث عن أطول فرعية من palindrome بين جميع فروعها ، مثل سلسلة Google ، وأطول فرقة فرعية هي تحليل goog *: * 1 ، وأبسط الفكرة ، والأكثر المباشرة: العثور على جميع الأسلوب المتماثل ، ثم الحكم على ما إذا كان كل فرد هو palindrome ، وسجل ، التعقيد هو O (n^3) */ سلسلة عامة LongistPalIndRome1 (سلسلة S) {string result = null ؛ سلسلة tempString = "" ؛ // تحديد طول أطول palindrome substring int max = 0 ؛ // نقل جميع العناصر في السلسلة لـ (int i = 0 ؛ i <s.length () ؛ i ++) {// يبدأ مؤشر corrge arcorsp j في اجتياز السلسلة من أجل (int j = s.length ()-1 ؛ j> i ؛ j-) {// palindrome tempstring = s.substring (i ، j+1) ؛ // إذا كان TempString عبارة عن سردان في Palindrome وطوله (J-I+1)> كحد أقصى if (IspalIndRome (tempString) && (j-i+1)> max) {max = j-i+1 ؛ النتيجة = substring (i ، j+1) ؛ }}} نتيجة الإرجاع ؛ }2. الفكرة الثانية هي الحكم على كل شخصية t [i] في السلسلة
حتى سلسلة فرعية متتالية على t [i] ، t [i+1] هو palindrome
هو فرعية ذات طول غريب تتركز في t [i] palindrome
السلسلة العامة longestpalIndRome2 (سلسلة t) {string result = null ؛ // تخزين طول أقصى سلسلة palindrome int max = 0 ؛ // سافر عبر كل حرف وحكم على تمديد التكافؤ مع كل حرف كمركز لـ (int i = 0 ؛ i <t.length () ؛ i ++) {// تحديد مؤشرتين فرديين صفيف ، وتسلسل متسلسل متمركز على i ، i+1 int pstart = i ؛ int pend = i+1 ؛ بينما (pStart> = 0 && pend <= (t.length ()-1) && t.charat (pstart) == t.charat (pend)) {pStart-- ؛ Pend ++ ؛ } // إذا كان طول substring> max ، يتم تخزين طول سلسلة palindrome الفرعية مؤقتًا كأطول سلسلة palindrome الفرعية = (pend-1)-(pstart+1) -1 = pend-pstart-1 if (pend-pstart-1> max) {max = pend-pstart-1 ؛ النتيجة = substring (pStart+1 ، pend-1+1) ؛ } // من i كمركز ، حدد ما إذا كان التسلسل الفردي الممتد هو سلسلة palindrome pstart = i-1 ؛ Pend = i+1 ؛ بينما (pStart> = 0 && pend <= (t.length ()-1) && t.charat (pstart) == t.charat (pend)) {pStart-- ؛ Pend ++ ؛ } if (pend-pstart-1> max) {max = pend-pstart-1 ؛ النتيجة = substrint (t ، pstart+1 ، pend-1+1) ؛ }} نتيجة الإرجاع ؛ }