大写和连续相同字符串的比较都不是很大问题,这里主要说一下字符串中是否出现"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; }
}