1.判断回文子串

比如:aabcb,回文子串:a、a、aa、b、c、b、bcb
简单算法:可以暴力破解,双层循环,截取字符串,再反转比较

  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args){
  4. Scanner sc= new Scanner(System.in);
  5. String str = sc.next();
  6. int sum=0;
  7. for (int i = 0; i < str.length(); i++){
  8. for (int j = i+1; j <=str.length(); j++){
  9. String str1=str.substring(i, j);
  10. if(str1.equals( new StringBuffer(str1).reverse().toString()))
  11. sum++;
  12. }
  13. System.out.println(sum);
  14. }
  15. }

高级写法:
1.拿到字符串先右看,看是否有aa,aaa,aaaa这种类型的回文子串
2.右看完再右看补充,看有没有abba这种类型的回文子串
3.再根据下标左右看,看是否相等,但是可能会和右看的aaa这种类型重复,所以要比右看的长度长才能算

  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args){
  4. Scanner sc= new Scanner(System.in);
  5. String[] str = sc.next().split("");
  6. int sum=str.length;
  7. for (int i = 0; i < str.length; i++)
  8. {
  9. int j=i+1;
  10. while (j <str.length)//右看
  11. {
  12. if (str[i].equals(str[j]))
  13. {
  14. sum++;
  15. j++;
  16. }
  17. else
  18. break;
  19. }
  20. int k=i-1;
  21. while (k>=0&&j <str.length)//右看补加
  22. {
  23. if (str[k].equals(str[j]))
  24. {
  25. sum++;
  26. k--;
  27. j++;
  28. }
  29. else
  30. break;
  31. }
  32. int m=i-1;
  33. int n=i+1;
  34. while (m>=0 && n<str.length)//左看
  35. {
  36. if (str[m].equals(str[n])&&n>=j)
  37. {
  38. sum++;
  39. m--;
  40. n++;
  41. }
  42. else
  43. break;
  44. }
  45. }
  46. System.out.println(sum);
  47. }
  48. }

2.划分字母区间

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

  1. public static List<Integer> partitionLabels(String s) {
  2. int[] last = new int[26];
  3. int length = s.length();
  4. for (int i = 0; i < length; i++) {
  5. last[s.charAt(i) - 'a'] = i;
  6. }
  7. List<Integer> partition = new ArrayList<Integer>();
  8. int start = 0, end = 0;
  9. for (int i = 0; i < length; i++) {
  10. end = Math.max(end, last[s.charAt(i) - 'a']);
  11. if (i == end) {
  12. partition.add(end - start + 1);
  13. start = end + 1;
  14. }
  15. }
  16. return partition;
  17. }