大写和连续相同字符串的比较都不是很大问题,这里主要说一下字符串中是否出现"xyxy"这种情况的判断

首先先用两个指针i,j(j=i+1)去遍历数组,查看是否有相同的元素,如果没有就说明数组中各个字符各不相同
如果发生了str[i]==str[j],(str代表字符串)就说明此时字符串中至少存在两个相同的字符,此时分类讨论
1.如果j==i+1,就是说两个相同的字符是挨在一起的,此时令k=j+1,l=k+1,去遍历下标j之后的字符
图片说明

如果发生了str[k]==str[l]&&str[k]==str[i]的情况(这里需要str[k]==str[i]这个条件是为了避免出现"xxyy",x!=y这种情况的出现),就说明出现了四个相同的字符

2.如果i+1!=j,就令k=i+1,让k遍历下标i和下标j之间的所有元素,再令l=j+1,遍历下标j之后的所有元素,如果发生了str[k]==str[l]的情况,就说明出现了"xyxy"的情况(这里x和y有可能相同)
图片说明

代码如下:

import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(isLike(str)?"Likes":"Dislikes");
}

public static boolean isLike(String str) {
    if (str.toUpperCase() != str) {
        return false;
    }
    for (int i = 0; i < str.length() - 1; i++) {
        if (str.charAt(i) == str.charAt(i + 1)) {
            return false;
        }
    }
    for (int i = 0; i < str.length() - 1; i++) {
        for (int j = i + 1; j < str.length(); j++) {
            if (str.charAt(i) == str.charAt(j)) {
                if (i + 1 == j) {
                    for (int k = j + 1; k < str.length() - 1; k++) {
                        for (int l = k + 1; l < str.length(); l++) {
                            if (str.charAt(k) == str.charAt(l)) {
                                return false;
                            }
                        }
                    }
                } else {
                    for (int k = i + 1; k < j; k++) {
                        for (int l = j + 1; l < str.length(); l++) {
                            if (str.charAt(k) == str.charAt(l)) {
                                return false;
                            }
                        }
                    }
                }
            }
        }
    }
    return true;
}

}