2014-09-08 4 views
0

그래서 여기에는 3200 자의 문자열이 있습니다. 그 사이에 대부분의 공간이있는 쌍을 찾아야합니다. 이미 쌍을 찾을 코드가 있지만 그 다음에는 쌍의 첫 번째 문자를 제거해야합니다. 두 번째 줄을 줄 끝에서 옮기고 그렇게 할 수 없을 때까지이 일을하십시오. 여기에 지금까지 한 일이다자바 커팅 문자열 쌍

import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 

public class StringPairs { 
    public static void main(String[] args) { 
     String inputString = readInputString(); 
     printIdenticalSymbols(inputString); 
    } 

    private static String readInputString() { 
     Scanner in = new Scanner(System.in); 
     String inputString = in.nextLine(); 
     in.close(); 
     return inputString; 
    } 


    private static void printIdenticalSymbols(String inputString) { 
     Map<Character, Integer> symbolsMap = new HashMap<Character, Integer>(); 
     char longestChar = ' '; 
     int longestDiff = -1; 
     int firstIndex = -1; 
     int lastIndex = -1; 
     int firstOccurenceOfLastIdentical = -1; 
     for (int i = 0; i < inputString.length(); i++) { 
      char currentCharacter = inputString.charAt(i); 
      if (!symbolsMap.containsKey(currentCharacter)) { 
       symbolsMap.put(currentCharacter, i); 
       continue; 
      } 

      int firstOccurenceIndex = symbolsMap.get(currentCharacter); 
      if (firstOccurenceIndex < firstOccurenceOfLastIdentical) { 
       symbolsMap.put(currentCharacter, i); 
       continue; 
      } 

      int currentIdenticalLength = i - firstOccurenceIndex; 
      if (currentIdenticalLength > longestDiff) { 
       longestChar = currentCharacter; 
       longestDiff = currentIdenticalLength; 
       firstIndex = firstOccurenceIndex; 
       lastIndex = i; 
      } 

      firstOccurenceOfLastIdentical = firstOccurenceIndex; 
      symbolsMap.put(currentCharacter, i); 

     } 
     System.out.println(longestChar + " - " + firstIndex + ":" + lastIndex); 
    } 
} 

예를 입력 :

brtba 

출력 : B는 : 그들 사이의 공간 (이미이 작업을 수행) 및 rtab 문자열이 더 큰 경우가 될 때까지이 일을 그렇게 할 수는 없습니다.

+2

샘플 입력 및 예상 출력을 보여주십시오. – TheLostMind

+0

@ TheLostMind 완료 수정 추가됨 –

답변

0

그것은 숙제처럼 보입니다.

어쨌든 String 조작 함수, 특히 String.substring (begin, end)을 조사해야합니다. 루프를 만들려면 while 루프를 살펴보십시오. 쌍이없는 경우에는 아직 처리하지 않습니다.

이것은 말하기를, 나는 테스트의 기능을 이해하지 못한다 : (firstOccurenceIndex < firstOccurenceOfLastIdentical).