Gamomusic Ответов: 1

Как решить эту проблему со строками и ключами?


An Ethical Hacker has been tasked to find vulnerabilities in Transaction Operations of an
Organization XYZ. He has been able to find a relation between the Transaction ID and the Key generated
by the System. Write a program that generates Key from the Transaction ID.
Transaction ID S is a String consisting of only lower case alphabetic characters, i.e. S[i] ∈ [a, z]. K
is said to be a possible key of S, if there exist at least one-character C ∈ [a, z] in each and every substring
of S of length K. Key of ID is the minimum of such possible Ks.
Input
First line contains Transaction ID S (1≤ length(S)≤ 100000)
Output
Key of Transaction ID i.e. Minimum of possible keys Ks
Like if inputs are:-
zbcde   /*here c is common between substrings 
        Having 3 max length i.e zbc cde
bbbbb    /* in this only b is there so length 
         Becomes 1 i.e b
zbzczbz  /*here z is common in maximum length 
         2 of given string i.e zb bz zc cz zb 
          bz 
Then output will be like:-
3
1
2


Что я уже пробовал:

<pre>import java.util.Scanner;

public class lab3hw {
	public static boolean aresame(int[] array)
	{
	    boolean fe = array[0] == 0;
	    for(int i = 1; i < array.length; i++)
	    {
	        if(fe)
	            if(array[i] != 0) return false;
	        else 
	            if(!(array[0]==array[i])) return false;
	    }

	    return true;
	}
	public static boolean samechar(String s)
	{
	    int n = s.length();
	    boolean boo=false;
	    for (int i = 1; i < n; i++)
	        if (s.substring(i,i+1).equals(s.substring(0,1))) {
	            boo=false;
	            
	        }else {
	        	boo=true;
	        }
	    return boo;
	}
	public static int conditions(String str) {  
	 int ci, i, j, k, l=0;
	 int result=0;
     char c, ch;
     i=str.length();
     if(samechar(str)==false) {
    	 
    	 result=1;
     }else {
	     for(c='A'; c<='z'; c++)
	     {
	         k=0;
	         for(j=0; j<i; j++)
	         {
	             ch = str.charAt(j);
	             if(ch == c)
	             {
	                 k++;
	             }
	         }
	         if(k>0)
	         {
	             int[]n=new int[50];
	             for(int m=0;m<i;m++){
	             n[m]=k;
	             }
	         if(aresame(n)==true) { 
	        	 if((str.length())%2==0) {
	        		 result= str.length()/2;}
	        	 else {
	        		 result=(str.length()+1)/2;
	        	 }
	         }else if(aresame(n)==false) {
	        	 
	         }
	         }
	     }
	     
     }
     return result;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner a=new Scanner(System.in);
		String b=a.next();
		System.out.println(conditions(b));
		
	}

}

Пожалуйста скажите мне как я могу это сделать

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. И в этом нет никакого смысла!
Пожалуйста, еще раз посмотрите на свой домашний вопрос и постарайтесь понять, что именно он задает: мы не получаем никакого контекста, кроме того, что вы печатаете.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Gamomusic

теперь я предоставил лучшую информацию

1 Ответов

Рейтинг:
1

OriginalGriff

Это ваше домашнее задание, так что вы не получите никакого кода!
Но... это не особенно сложно.
Начните с определения частоты каждого возможного значения на входе: есть несколько способов сделать это, но для такого простого ввода я бы, вероятно, использовал массив для их подсчета: первый элемент для "а", второй для "В" и так далее. Проанализируйте свою строку и подсчитайте каждый символ. Когда вы знаете это, вы можете узнать самую высокую частоту: все '1 означает, что это средний символ, только одно значение очевидно, другие означают, что вам нужно обработать строку. Вы можете использовать CharAt для доступа к отдельным символам.

Начните с этого и посмотрите, как далеко вы продвинетесь.


Gamomusic

теперь мой код работает для 2 случаев, но я все еще не понимаю, как сделать последний тестовый случай, который является zbzczbz для этого вывода будет 2.

OriginalGriff

Да - потому что самая высокая частота будет 3, Что означает "z". Таким образом, каждая строка начинается или заканчивается на букву "z".
строка первая: start to z, (0 символов, игнорировать)
две строки: з просто-перед-з, ЗБ (2 знака)
строка третья: после z до z, bz (2 символа)
И так далее.
Длинных строк: 2 символов.

Gamomusic

пожалуйста скажите мне что я должен сделать для последнего случая

Gamomusic

теперь я изменил свой код что я уже пробовал