首页 > 试题广场 >

小易喜欢的单词

[编程题]小易喜欢的单词
  • 热度指数:18454 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词(只要不是不喜欢,就是喜欢)。

输入描述:
输入为一个字符串,都由大写字母组成,长度小于100


输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
示例1

输入

AAA

输出

Dislikes
示例2

输入

AbAB

输出

Dislikes
示例3

输入

ABACADA

输出

Dislikes
示例4

输入

AEBFCEDF

输出

Dislikes
import java.util.Scanner;
 
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        if (isLike(s)) {
            System.out.println("Likes");
        } else {
            System.out.println("Dislikes");
        }
    }
    
    public static boolean isLike(String s) {
        for (int i = 0; i < s.length(); i++) {
            if ((s.charAt(i) > 'a' && s.charAt(i) < 'z')) {
                return false;
            }
        }
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                return false;
            }
        }
        for (int i = 1; i < s.length(); i++) {
            for (int j = 0; j < i - 1; j++) {
                if (s.charAt(j) == s.charAt(i)) {
                    for (int k = 0; k < j; k++) {
                        for (int l = j + 1; l < i; l++) {
                            if (s.charAt(k) == s.charAt(l)) {
                                return false;
                            }
                        }
                    }
                }
            }
        }
        return true;
    }
}

发表于 2021-04-18 14:57:24 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.next();
            boolean flag = isLike(s);
            System.out.println(flag ? "Likes" : "Dislikes");
        }
    }
    private static boolean isLike(String s){
        boolean upCase = true;
        boolean disCon = true;
        int right = 0;
        int left = -1;
        int n = s.length();
        while(right < n){
            if(left != -1){
                disCon &= (s.charAt(right) != s.charAt(left));
            }
            if(s.charAt(right) < 'A' || s.charAt(right) > 'Z') upCase = false;
            left = right;
            right++;
        }
        if(!(disCon && upCase)) return false;
        int[] arr = new int[26];
        for(int i = 0; i < n - 2; i++){
            for(int j = i+1; j < n - 2; j++){
                char c1 = s.charAt(i);
                char c2 = s.charAt(j);
                String sub = s.substring(j+1, n);
                int index1 = sub.indexOf(c1);
                int index2 = sub.indexOf(c2);
                if(index1 != -1 && index2 != -1 && index1 < index2){
                    return false;
                }
            }
        }
        return true;
    }
}

发表于 2020-08-17 16:30:08 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
       System.out.println(solution());
    }
    public static String solution(){
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        if(s.toUpperCase() != s){
            return "Dislikes";
        }
        for(int i=0; i<s.length()-1; i++){
            if(s.charAt(i) == s.charAt(i+1)){
                return "Dislikes";
            }
        }
        for(int i=0; i<s.length(); i++){
            for(int j=i+1; j<s.length(); j++){
                if(s.charAt(i) == s.charAt(j) && j!=s.length()-1){
                   if(i+1<s.length()){
                       int k = i+1;
                       for(; k<j; k++){
                           String t = s.substring(j+1);
                           if(t.contains(s.substring(k,k+1))){
                               return "Dislikes";
                           }
                       }
                   }
                }
            }
        }
        return "Likes";
    }
}
编辑于 2019-03-30 11:16:09 回复(0)
用正则表达式的大佬厉害,这里我用暴力破解法,
1.是否有连续字母相同,若有结束,若无则下一步
2.是否有子序列,假设字符串为“ABACADA”,四个A编号为A1A2A3A4先找出两个相同字母,A1,A2,A1到A2之间的每一个字母与A2之后的每一个字母对比,若有相同直接结束。
满足条件的是:先找出的两个相同字母为A1A3,然后A1和A3之间的A2与A3之后的A4相同,结束
import java.util.Scanner;
public class Test {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        if(!isSingleChar(str) || isSonSequ(str))
            System.out.println("Dislikes");
        else
            System.out.println("Likes");
    }
    //是否含有子序列-->暴力破解法
    private static boolean isSonSequ(String str) {
        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)){
                    for(int t=i+1;t<j-1;t++){
                        for(int k=j+1;k<str.length();k++)
                            //是否含有子序列
                            if(str.charAt(t)==str.charAt(k)){
                                //System.out.println(str.charAt(t)+" "+str.charAt(k)+t+k);
                                return true;
                            }
                                
                    }
                }
            }
        }
        return false;
    }
    //是否没有连续相同字母
    private static boolean isSingleChar(String str) {
        for(int i=0;i<str.length()-1;i++)
            if(str.charAt(i)==str.charAt(i+1))
                return false;
        return true;
    }
}
发表于 2018-08-16 22:49:56 回复(0)
26个字母,三个属性,分别是出现次数、最早出现位置和最晚出现位置,检查是否有重叠。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {     public static void main(String[] args) throws IOException {         BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));         char[] c = bf.readLine().toCharArray();         if(like(c))System.out.println("Likes");         else System.out.println("Dislikes");     }     private static boolean like(char[] c) {         int[][] cnt = new int[26][3];         ArrayList<Integer> over = new ArrayList<>();         cnt[c[0]-'A'][0] = 1;         cnt[c[0]-'A'][1] = -1;         cnt[c[0]-'A'][2] = -1;         for(int i = 1; i < c.length; i++){             if(c[i]==c[i-1]) return false;             int t = c[i]-'A';              if(cnt[t][1]==0) cnt[t][1] = i;             cnt[t][2] = i;             cnt[t][0]++;             if(cnt[t][0] >= 4) return false;             else if(cnt[t][0] >= 2){                 if(!over.isEmpty()){                     for(int a:over)                         if(cnt[t][1]>cnt[a][1]&&cnt[t][1]<cnt[a][2])                             return false;                 }                 over.add(t);             }         }         return true;     }
}

编辑于 2018-07-17 15:30:00 回复(0)

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    char[] s = str.toCharArray();
    int p = 0;
    for (int i = 1; i < s.length; i++){
        if(s[i]==s[i-1]){
            System.out.println("Dislikes");
            p=1;
            break;
        }else{
            for (int j = i-2; j >= 0; j--){
                if (s[i]==s[j]){
                    for (int m = j-1;m>=0;m--){
                        for (int n = i-1;n>j;n--){
                            if (s[m]==s[n]){
                                System.out.println("Dislikes");
                                p = 1;
                                break;
                            }
                        }
                        if(p==1){
                            break;
                        }
                    }
                }
                if(p==1){
                    break;
                }
            }
        }
        if(p==1){
            break;
        }
    }
    if(p==0){
        System.out.println("Likes");
    }

}

}

发表于 2018-04-11 00:57:04 回复(0)

咋说呢,正则表达式真好用

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        if (isAllUpCase(input) && isConEql(input)&&isThrEql(input))
            System.out.println("Likes");
        else
            System.out.println("Dislikes");
    }

    public static boolean isAllUpCase(String string) {
        return string.matches("[A-Z]+");
    }

    public static boolean isConEql(String string) {
        return !string.matches(".*(.)(\\1).*");
    }

    public static boolean isThrEql(String string) {
        return !string.matches(".*(.).*(.)(.*\\1)(.*\\2).*");
    }
}
编辑于 2018-03-14 16:55:42 回复(0)
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in); //经分析有两种不喜欢的 1.两个连续的'X' 2. -X-Y-X-Y-  -表示有任意字符  第三种AAAA其实是属于2.的特例
        boolean flag = Pattern.matches(".*([A-Z]).*([A-Z]).*\\1.*\\2.*||.*([A-Z])\\3.*",scanner.nextLine());
        System.out.println(flag);
         if(!flag) System.out.println("Likes");
        else System.out.println("Dislikes");
    }
}
发表于 2018-03-07 17:38:07 回复(0)
import java.util.*;

public class Main{
    public static boolean judge(String s){
        char [] chars = s.toCharArray();
        char tmp = 0;
        for (char c : chars){
            if (c >'Z' || c < 'A') return false;
            if (tmp == c) return false;
            tmp = c;
        }
        Set<Character> charSet = new HashSet<>();
        int count;
        for (int i = 0; i < chars.length; i++){
            charSet.clear();
            count = 1;
            for (int j = i + 1; j < chars.length; j++){
                if (chars[i] == chars [j]){
                    count++;
                    if (count > 3) return false;
                }else if (count > 1 && charSet.contains(chars[j])) return false;
                else if (count == 1) charSet.add(chars[j]);

            }
        }
        return true;
    }
    public static void  main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.nextLine();
            System.out.println(judge(s)?"Likes":"Dislikes");
        }
        sc.close();
    }
}
编辑于 2018-01-24 13:25:21 回复(1)
//参考高票答案,好好学正则,没错的
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            boolean res = isUpperCase(str) && (!isContinue(str)) && (!isSameXYXY(str));
            if (res) System.out.println("Likes");
            else System.out.println("Dislikes");
        }
    }
    private static boolean isUpperCase(String str) {
        return str.matches("[A-Z]+");
    }
    private static boolean isContinue(String str) {
        return str.matches(".*(.)\\1.*");
    }
    private static boolean isSameXYXY(String str) {
        return str.matches(".*(.).*(.).*\\1.*\\2.*");
    }
}

发表于 2017-12-07 21:22:27 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        String word = in.nextLine();
        
        for(int i=0;i<word.length();i++){
            char temp = word.charAt(i);
            int transport = temp;
            if(transport<65||transport>96){
                System.out.println("Dislikes");
                System.exit(0);
            }
        }

        for(int i=0;i<word.length()-1;i++){
            char temp = word.charAt(i);
            if(temp==word.charAt(i+1)){
                System.out.println("Dislikes");
                System.exit(0);
            }
        }
        
        for(int i=0;i<word.length()-3;i++){
            char temp1 = word.charAt(i);
            char temp2 = word.charAt(i+1);
            char temp3 = word.charAt(i+2);
            char temp4 = word.charAt(i+3);
            if(temp1==temp3&&temp2==temp4){
                System.out.println("Dislikes");
                System.exit(0);
            }
        }
        System.out.println("Likes");
        
    }

}

发表于 2017-09-16 16:35:25 回复(0)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
 public static void main(String[] args) {
 // TODO 自动生成的方法存根
     Scanner sc= new Scanner(System.in);
     String s=sc.next();
     Pattern pattern = Pattern.compile("(\\w+)\\1");
     Matcher matcher = pattern.matcher(s);
     if(matcher.find()){
         System.out.println("Dislikes");
     }else{
         if(Pattern.matches("\\w*(\\w+)\\w*(\\w+)\\w*\\1\\w*\\2\\w*", s)){
             System.out.println("Dislikes");
         }else{
             System.out.println("Likes");
         }
     }
}
}
编辑于 2017-09-04 11:10:10 回复(0)
牛客检测的测试用例有问题,在代码中只需要满足前面两项即可AC;1.判断全部都为大写字母,可以使用正则word.matches("[A-Z]+"),也可以使用编码字符集判断word.charAt(i)>'A' &&<'Z';2.判断有无连续相同的字母,对字符串的每个字符进行遍历,然后与前面或者与后面一个字符进行判断即可
import java.util.Scanner;

public class StringUtil {
	
	//小易喜欢的单词
	public static void main(String[] args){
		
		Scanner in = new Scanner(System.in);
		String str = in.next();
		boolean like = true;
		if(str.matches("[A-Z]+")){
			for(int i=1; i<str.length(); i++){
				if(str.charAt(i) == str.charAt(i-1)){
					like = false;
					break;
				}
			}
			if(like == false){
				System.out.println("Dislikes");
			}
			else{
				System.out.println("Likes");
			}
		}
		else{
			System.out.println("Dislikes");
		}
	}
	
}

发表于 2017-08-31 14:01:40 回复(1)

import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
while(sc.hasNext()){
String s = sc.nextLine();
char[] chs = s.toCharArray();
System.out.println(judge(chs));
}
}
public static String judge(char[] chs){
for(int i = 0 ; i <chs.length;i++){ if(chs[i]-'Z'>0)
return "Dislikes";
if(i!=0&&chs[i]==chs[i-1]){
return "Dislikes";
}
}
return "Likes";
}
}

发表于 2017-08-15 14:44:42 回复(1)

f**k,没有想到交叉问题,尝试了各种算法,什么位运算保存数组ij顺序

public class 小易喜欢的单词 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();

        char[] arr = str.toCharArray();
        //'A' 65 'Z' 90
        int pre = 0;
        boolean isLike = true;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < 65 || arr[i] > 90) {
                isLike = false;
                break;
            }
            if (i == 0) {
                pre = arr[0];
                continue;
            }
            if (arr[i] == pre) {
                isLike = false;
                break;
            } else {
                pre = arr[i];
            }
        }
        String[][] dp = new String[arr.length][arr.length];
        HashMap<String, String> map = new HashMap<>();
        for (int i = 1; i < arr.length; i++) {
            for (int j = 0; j < i; j++) {
                dp[i][j] = arr[i] + "" + arr[j];
                if (map.containsKey(dp[i][j])) {
                    String[] iPlusJ = map.get(dp[i][j]).split(" ");
                    String tempI = iPlusJ[0];
                    String tempJ = iPlusJ[1];
                    if (i != Integer.parseInt(tempI) && j != Integer.parseInt(tempJ) && j > Integer.parseInt(tempI)) {
                        isLike = false;
                        break;
                    }
                } else {
                    map.put(dp[i][j], i + " " + j);
                }
            }
        }

        System.out.println(isLike ? "Likes" : "Dislikes");
    }
}
发表于 2017-08-12 14:22:49 回复(0)
//运行超时,求优化
import java.util.*;
public class Main{
    private static ArrayList<String> list=new ArrayList<>();
	public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            String str1=in.next();
            char[] ch = str1.toCharArray();
            if(isConitnue(str1)){
        		System.out.println("Dislikes");
        		return;
            }
            StringBuffer sb = new StringBuffer();
            test(ch, sb, 0);
            for(String s:list){
            	if(isSecondConitnue(s)){
            		System.out.println("Dislikes");
            		return;
            	}
            }
            System.out.println("Likes");
        }
    }
    
	/**
	 * 判断是否有两个连续
	 * @param s
	 * @return
	 */
    private static boolean isSecondConitnue(String str) {
		char[] c = str.toCharArray();
		if(c.length>=4){
			for(int i=0;i<c.length-3;i++){
				for(int j=i+2;j<c.length-1;j++){
					if(c[i]==c[j]&&c[i+1]==c[j+1]){
						return true;
					}
				}
			}
		}
		
		return false;
	}


	/**
     * 判断是否有连续
     * @param s
     */
    private static boolean isConitnue(String str) {
		char[] c = str.toCharArray();
		char temp=c[0];
    	for(int i=1;i<str.length();i++){
    		if(temp!=c[i]){
    			temp=c[i];
    		}else{
    			return true;
    		}
    	}
		return false;
		
	}



	/**
     * 求所有子序列:例如串 abc,它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种
     * @param ch      str.toCharArray()
     * @param sb     子序列用StringBuffer
     * @param start   起始0
     */
    public static void test(char[] ch,StringBuffer sb,int start){//全排列str1,把所有排序可能放在list中
        for (int i = start; i < ch.length; i++) {
            sb.append(ch[i]);
            list.add(sb.toString());
            if (sb.length()<ch.length) {
                test(ch, sb, i+1);
            }
            sb.setLength(sb.length()-1);
        }
    }
    
}

发表于 2016-09-01 16:34:04 回复(0)