Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class Solution {
  4. private char[] symbols;
  5. private int size;
  6.  
  7. public String longestPalindrome(String s) {
  8. size = s.length();
  9. if (size < 2) {
  10. return s;
  11. }
  12.  
  13. symbols = s.toCharArray();
  14.  
  15. ArrayList<Pair> bases = new ArrayList<>(7);
  16. Pair pair = null;
  17. for (int i = 0; i < size - 1; i++) {
  18. if (pair == null && symbols[i] == symbols[i + 1]) {
  19. pair = new Pair(i, i + 1);
  20. continue;
  21. }
  22. if (pair != null && symbols[i] != symbols[i + 1]) {
  23. pair.right = i;
  24. bases.add(pair);
  25. pair = null;
  26. }
  27. }
  28. if (pair != null) {
  29. pair.right = size - 1;
  30. bases.add(pair);
  31. }
  32.  
  33. for (int i = 0; i < size - 2; i++) {
  34. if (symbols[i] == symbols[i + 2]) {
  35. bases.add(new Pair(i, i + 2));
  36. }
  37. }
  38.  
  39. if (bases.isEmpty()) {
  40. return s.substring(0, 1);
  41. }
  42.  
  43. Pair longest = new Pair(0, -1);
  44. for (int i = 0; i < bases.size(); i++) {
  45. Pair expand = expand(bases.get(i));
  46. if (expand.right - expand.left > longest.right - longest.left) {
  47. longest = expand;
  48. }
  49. }
  50.  
  51. return s.substring(longest.left, longest.right + 1);
  52. }
  53.  
  54. private Pair expand(Pair initial) {
  55. Pair result = new Pair(initial.left, initial.right);
  56. while (result.left > 0 && result.right < size - 1) {
  57. int left = result.left - 1;
  58. int right = result.right + 1;
  59. if (symbols[left] != symbols[right]) {
  60. break;
  61. }
  62. result.left = left;
  63. result.right = right;
  64. }
  65. return result;
  66. }
  67. }
  68.  
  69. class Pair {
  70. int left;
  71. int right;
  72.  
  73. Pair(int left, int right) {
  74. this.left = left;
  75. this.right = right;
  76. }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement