코드를 먼저보십시오
공개 클래스 maxhuiwen {public static void main (String [] args) {// todo 자동 생성 메소드 스터브 문자열 s = "abb"; Maxhuiwen (들); } // 1. 출력 Palindrome String public static void maxhuiwen (문자열 s) {// 문자열의 길이 int 길이 = s.length (); // 가장 긴 palindrome 문자열 string maxstring = ""; // (int i = 0; i <length; i ++) {for (int j = i; j <length+1; j ++) {String s1 = substring (i, j); // 현재 문자열이 Palindrome 문자열이고 MaxString의 길이보다 큰 경우, 현재 maxstring if (huiwen (s1) && s1.length ()> maxstring.length ()) {maxstring = s1; } //system.out.println(s1); }} // maxstring의 길이가 2보다 크거나 같으면 (maxstring.length ()> = 2) {system.out.println (maxstring); } else {System.out.println ( "Palindrome String 없음"); }} // 2. 문자열이 Palindrome String public static boolean huiwen (문자열 s) {boolean flag = true; int 길이 = s.length (); char s1 [] = s.tochararray (); // 앞뒤로 문자열을 가로 지르고 (int i = 0, j = 길이 -1; i <= j; i ++, j-) {if (s1 [i]! = s1 [j]) {flag = false; }} 반환 플래그; }}1. 줄의 목회 적 판단
문자열이 팔린 드롬인지 결정하십시오
String t = "Madam"과 같은 문자열이 주어진 문제 설명; 문자열이 Palindrome인지 확인합니다
방법 1 : 1. 두 문자열 요소 포인터를 정의합니다 (Java는 포인터의 개념이 없음), int right = t.length () -1; int left = 0;
2. 즉, 왼쪽에서 왼쪽에서 시작하고 오른쪽에서 오른쪽에서 시작하여 참조 문자가 순서대로 동일인지 비교합니다. 그들이 동일하다면, 왼쪽 ++, 오른쪽-; 그렇지 않으면 배경이 아닌 직접 반환됩니다.
while (왼쪽 <오른쪽) {if (t.charat (왼쪽)! = t.charat (오른쪽)) false; 왼쪽 ++; 오른쪽-;} true;암호:
/ * * 3 : * palindrome * 문제 설명 : 영어 Palindrome의 Palindrome은 Madam, I Love Me, Metho 1 : * 분석 : 각각 두 개의 "포인터"를 사용하여 문자열의 시작과 끝에서 각각 스캔합니다. 각 "포인터"에 의해 지적 된 값이 동일하다면, 이것은 palindrome*/ public boolean ispalindrome (문자열 s) {if (s == null)가 false를 반환합니다. int left = 0; int right = s.length () -1; while (왼쪽 <오른쪽) {if (s.charat (왼쪽)! = s.charat (오른쪽)) false를 반환합니다. 왼쪽 ++; 오른쪽--; } true를 반환합니다. } 방법 2 : "부인"과 같은 파스텔어 문자열. 당신이 그들 모두를 반전 시키면, 당신은 여전히 자신의 "부인"을 얻게됩니다. 두 줄을 비교할 때 동일하면 파스텔어입니다.
1. 문자열을 뒤집는 함수를 구현하십시오
/** 문자열의 반전 함수를 구현*/ 개인 문자열 리버스 (String str) {String strresult = ""; for (int i = str.length () -1; i> = 0; i-) {strresult+= str.charat (i); } return strresult; } 2. 대상 문자열 s의 경우 먼저 temp = reverse (s)를 반대로 한 다음 템피 컬러 판단/** 문자열을 뒤집은 다음 원래 문자열과 비교하십시오. 그것이 동일하다면, 그것은 palindrome입니다. 그렇지 않으면 * 알고리즘 시간 복잡성은 o (n) */public boolean ispalindrome2 (string s) {string temp = reverse (s); if (s.equals (temp)) true; elsereturn false;}입니다.2 : 주어진 문자열에 대한 최대 Palindromic String을 찾는 방법
예를 들어, 문자열 문자열 t = "google"이 주어지면 가장 긴 Palindrome 서브 스트링 "Goog"를 찾는 방법
1. 가장 간단하고 가장 직접적인 아이디어는 문자열의 모든 하위 문자열을 찾은 다음 각 하위 문자열이 팔린 드롬인지, 최대 길이의 팔린 드롬을 기록하고, 비교하고 찾는 것인지를 결정하는 것입니다. * 알고리즘 시간 복잡성은 O (n^3)입니다.
/ * * 4, 가장 긴 Palindrome substring * 문제 설명 : 문자열이 주어지면 Google 문자열과 같은 모든 서브 스트링 중에서 가장 긴 Palindrome 서브 스트링을 찾으십시오. 가장 긴 하위 문자열은 Goog * 분석입니다. * 1, 가장 단순하고 가장 직접적인 아이디어는 문자열의 모든 하위 문장을 판단하고, 각 하위 스트리트가 Palindrome의 모든 기판을 찾으든지, 음원을 찾는 것입니다. 복잡성은 o (n^3) */ public String longestpalindrome1 (문자열 s) {문자열 result = null; 문자열 tempstring = ""; // 가장 긴 Palindrome 서브 스트링 int max = 0의 길이를 정의합니다. // (int i = 0; i <s.length (); i ++) {// 배열 위시 포인터 j는 (int j = s.length () -1; j> i; j-) {// palindrome tempstring = s.substr (i, j+1)의 문자열에서 모든 요소를 전송합니다. // TempString이 Palindrome 서브 스트링이고 길이 (j-i+1)> max if (iSpalindrome (tempstring) && (j-i+1)> max) {max = j-i+1; 결과 = 기판 (i, j+1); }}} 반환 결과; }2. 두 번째 아이디어는 문자열에서 모든 문자 t [i]를 판단하는 것입니다.
t [i]를 중심으로 한 균일 한 기판은 palindrome입니다
palindrome t [i]를 중심으로하는 홀수 길이의 하위 문자열입니다
공개 문자열 longestpalindrome2 (String t) {문자열 result = null; // 최대 Palindrome 문자열의 길이 int max = 0; // 각 캐릭터를 여행하고 각 문자를 중심으로 (int i = 0; i <t.length (); i ++)로 판단합니다. {// 두 배열 위시 포인터를 정의하고 I, i+1 int pstart = i; int pend = i+1; while (pstart> = 0 && pend <= (t.length () -1) && t.charat (pstart) == t.charat (pend)) {pstart--; PEND ++; } // 하위 문자열의 길이> max의 길이가 서브 팔린 드롬 문자열의 길이는 일시적으로 가장 긴 하위 팔린 드롬 문자열 = (ped-1)-(pstart+1) -1 = pend-pstart-1 if (pend-pstart-1> max) {max = pend-pstart-1; 결과 = 서브 스트링 (pstart+1, pend-1+1); } // i에서 중심으로서 확장 된 홀수 시퀀스가 Palindrome String pstart = i-1인지 확인하십시오. pend = i+1; while (pstart> = 0 && pend <= (t.length () -1) && t.charat (pstart) == t.charat (pend)) {pstart--; PEND ++; } if (pend-pstart-1> max) {max = pend-pstart-1; 결과 = 기판 (t, pstart+1, pend-1+1); }} 반환 결과; }