Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.math.BigDecimal;
- import java.math.BigInteger;
- import java.util.*;
- public class Main
- {
- static List<Character> lol = Arrays.asList('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w', 'x', 'y', 'z');
- public static void main(String[] args)
- {
- // write your code here
- Scanner sc = new Scanner(System.in);
- String word = sc.nextLine();
- // выделить подслова.
- if (isPolindrome(new StringBuilder(word)))
- System.out.println(0);
- else
- {
- Set<String> subwords = cutSubwordsFrom(word);
- int min = Integer.MAX_VALUE;
- for (String subword : subwords)
- {
- if (isAlmostPoli(subword))
- if (min > (word.length() - subword.length()))
- min = word.length() - subword.length();
- }
- System.out.println(min);
- }
- }
- private static boolean isPolindrome(StringBuilder word)
- {
- String start = word.toString();
- String reversed = word.reverse().toString();
- return reversed.equals(start);
- }
- private static Set<String> cutSubwordsFrom(String word)
- {
- StringBuilder builder = new StringBuilder(word);
- Set<String> subwords = new HashSet<>();
- for (int i = 0; i < word.length(); i++)
- {
- for (int j = i+1; j <= word.length(); j++)
- {
- char[] sub = new char[j - i];
- builder.getChars(i, j, sub, 0);
- subwords.add(new String(sub));
- }
- }
- return subwords;
- }
- private static boolean isAlmostPoli(String word)
- {
- for (int i = 0; i < word.length(); i++)
- {
- StringBuilder builder = new StringBuilder(word);
- builder = builder.deleteCharAt(i);
- if (isPolindrome(builder))
- return true;
- }
- for (Character lel : lol)
- {
- for (int i = 0; i < word.length(); i++)
- {
- StringBuilder builder = new StringBuilder(word);
- builder.setCharAt(i, lel);
- if (isPolindrome(builder))
- return true;
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement