結果
| 問題 |
No.588 空白と回文
|
| コンテスト | |
| ユーザー |
Tsukasa_Type
|
| 提出日時 | 2018-02-14 00:14:02 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 209 ms / 2,000 ms |
| コード長 | 1,218 bytes |
| コンパイル時間 | 2,464 ms |
| コンパイル使用メモリ | 77,972 KB |
| 実行使用メモリ | 57,720 KB |
| 最終ジャッジ日時 | 2024-12-14 12:47:23 |
| 合計ジャッジ時間 | 7,465 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
import java.util.*;
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
String s = sc.next();
//まずは、端以外の文字を中心にして調べる
int ans1 = 0;
for (int i=1; i<s.length()-1; i++) {
StringBuilder sb = new StringBuilder(s);
StringBuilder L = new StringBuilder(sb.delete(i,sb.length()));
sb = new StringBuilder(s);
StringBuilder R = new StringBuilder(sb.delete(0,i+1));
L.reverse();
int max1 = 0;
for (int j=0; j<Math.min(L.length(),R.length()); j++) {
if (L.charAt(j)==R.charAt(j)) {max1++;}
}
ans1 = Math.max(ans1,max1);
}
ans1 = ans1*2+1;
//次、基準が文字の真ん中の場合
int ans2 = 0;
for (int i=1; i<s.length(); i++) {
StringBuilder sb = new StringBuilder(s);
StringBuilder L = new StringBuilder(sb.delete(i,sb.length()));
sb = new StringBuilder(s);
StringBuilder R = new StringBuilder(sb.delete(0,i));
L.reverse();
int max2 = 0;
for (int j=0; j<Math.min(L.length(),R.length()); j++) {
if (L.charAt(j)==R.charAt(j)) {max2++;}
}
ans2 = Math.max(ans2,max2);
}
ans2 = ans2*2;
System.out.println(Math.max(ans1,ans2));
}
}
Tsukasa_Type