2015-05-18 2 views
1

Метод stringScramble() принимает два Strings один из которых представляет собой scrambled String (например, rkqodlw), а вторые из них представляет собой фактическое слово (например, world) и возвращает true, если scrambled String может быть изменен, чтобы соответствовать второму String Например, когда я типа:Проверьте, если символы зашифрованных строк соответствуют второй строке

Enter two Strings: 
ellho 
hello 
false 

тогда программа дает мне false вместо true в ellho могут быть перестроены в hello.

import java.util.Scanner; 

public class StringScamble { 

    public static void main(String[] args) 
    { 
     Scanner kbd = new Scanner(System.in); 
     System.out.println("Enter two Strings: "); 
     String myString1 = kbd.nextLine(); 
     String myString2 = kbd.nextLine(); 

     boolean result = stringScramble(myString1, myString2); 
     System.out.println(result); 
    } 

    public static boolean stringScramble(String myString1, String myString2) 
    { 
     String temp = ""; 
     for(int i = 0; i < myString1.length(); i++) 
      for(int j = 0; j < myString2.length(); j++) 
      { 
       if(myString1.charAt(i) == myString2.charAt(j)) 
        temp += myString1.charAt(i); 
      } 
     if(temp.equals(myString1)) 
      return true; 
     else 
      return false; 
    } 
} 
+3

Более простое решение может подсчитать количество каждого символа в каждой строке и сравнить результаты. Кроме того, мне непонятно, могут ли дополнительные символы быть в скремблированной строке или нет. – clcto

+0

@clcto, я выполняю упражнения с Coderbyte.com, а 'scrambled String' включает в себя дополнительные символы в соответствии с упражнением. –

+0

Nevermind, ребята! Я проследил все, и моя проблема была в вложенных циклах. В принципе, я просто спрятал 'myString1' с' myString2' и добавил оператор 'break' внутри if-statement. Все работает прямо сейчас! :) –

ответ

0

проверяет внутренний цикл, если символ i первой строки равен символ j вторых, и если да присоединяет его к temp строке. Это должно работать нормально для строк с уникальными символами, но если вы сравните ellho с hello, вы столкнетесь с четырьмя случаями, когда l s равны, что не является предполагаемым поведением.

Поскольку заказ не имеет значения при сравнении, вы можете просто посчитать количество раз, когда каждый символ появляется в каждой строке и сравнивает их. .: например

public static Map<Character, Integer> charCount (String s) { 
    Map<Character, Integer> result = new HashMap<>(); 
    for (int i = 0; i < s.length(); ++i) { 
     Character c = s.charAt(i); 
     Integer cnt = result.get(c); 
     if (cnt == null) { 
      cnt = 1; 
     } else { 
      cnt = cnt + 1; 
     } 
     result.put (c, cnt); 
    } 
    return result; 
} 

public static boolean stringScramble(String myString1, String myString2) 
    return charCount(myString1).equals(charCount(myString2)); 
}