나는 두 번 나타나는 문자열의 모든 문자를 삭제해야하는 인코딩 프로그램을 수행하고 있습니다. 나는 문자열을 통과하려고 시도했지만 작동하지 않았습니다. 아무도 이것을하는 방법을 아는가? 감사.문자열에서 문자 찾기
답변
는 문자의 첫 번째 발생을 유지하고자한다고 가정하면, 당신은이 작업을 수행 할 수 있습니다
boolean seen[65536];
StringBuilder res = new StringBuilder();
str = str.toUpperCase();
for (char c : str.toCharArray()) {
if (!seen[c]) res.append(c);
seen[c] = true;
}
return res.toString();
seen
배열 플래그, 캐릭터 당 하나를 포함, 우리는 이미이 문자를 본 적이 있음을 나타내는 . 문자가 모두 ASCII 인 경우 seen
배열을 128
으로 축소 할 수 있습니다.
조금 더 간단 할 수있는'BitSet'을 사용할 것입니다. Meh. –
그래서 표시된 코드에서 문자열의 모든 문자를 비교하지 않는 것처럼 보입니다. 첫 번째와 마지막을 비교 한 다음 두 번째와 마지막을 비교합니다. 예 :
여기에 귀하의 문자열입니다 : THISISTHESTRINGSTRINGABCDEFGHIJKLMNOPQRSTUVWXYZ
첫 번째 반복, 당신이 처음에 T를 비교되며, 마지막에 Z가. I 및 X 등
그래서 T a를 시작 결코 얻을 수있는 문자의 나머지 부분에 비해 : 두 번째 반복, 당신은 H와 셋째 Y. 비교됩니다.int length = newword.length(); // This way the number of iterations doesn't change
for(i = 0; i < length; i++){
for(j = 0; j < length; j++){
if(i!=j){
if(newword.charAt(i) == newword.charAt(j)){
newword.replace(newword.charAt(i), ' ');
}
}
}
}
나는 그게 가장 효율적인 알고리즘이 아니다 확신 있지만 그것을 완수해야
나는이 할 수있는 더 나은 방법이 루프 더블을 할하는 것입니다 생각합니다.EDIT : i == j 케이스를 처리하기 위해 중간에 if 문을 추가했습니다.
편집이 다시 : 여기에 거의 동일한 포스트 : 두 번 표시 삭제 문자를 말함으로써 function to remove duplicate characters in a string
이것이 작동하지 않는 것처럼 보입니다.'i == j' 알고리즘에서는 알고리즘이 같은 문자라고 생각할 것입니다. – dasblinkenlight
감사합니다. 그걸 몰랐어. 나는 그 사건에 대한 수표를 추가했다. – dkniffin
가정하면, 코드가 당신을 위해 작동합니다 아래 AAABB는 AAA됩니다 의미한다. 이 코드의
static String removeDuplicate(String s) {
StringBuilder newString = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
String s1 = s.substring(i, i + 1);
// We need deep copy of original String.
String s2 = new String(s);
// Difference in size in two Strings gives you the number of
// occurences of that character.
if(s.length() - s2.replaceAll(s1, "").length() != 2)
newString.append(s1);
}
return newString.toString();
}
효율성은 논란의 여지가있다 : 루프에 의해 캐릭터의 발행 수의 수를 계산하기 위해 더 나은 방법이 될 수 있습니다.
- 1. 문자열에서 공통 문자 찾기
- 2. 문자열에서 인접한 문자 찾기
- 3. 문자열에서 마지막 char 문자 찾기
- 4. Android : 문자열에서 특정 문자 찾기
- 5. 자바 스크립트가있는 문자열에서 "#"문자 찾기
- 6. 주어진 점에서 사용자가 그려야하는 문자열에서 문자 찾기
- 7. 문자열에서 특수 문자 찾기 및 바꾸기
- 8. 문자열에서 문자 사이의 공백 문자
- 9. Ruby에서 문자열의 문자 찾기
- 10. 문자열에서 색인을 찾기 전에 특정 양의 문자 제거
- 11. 파이썬을 사용하여 문자열에서 숫자 찾기
- 12. 다른 문자열에서 문자열 찾기
- 13. 문자열에서 번호 찾기 xslt
- 14. 문자열에서 단어 찾기 PHP
- 15. 문자열에서 \의 strrpos 찾기
- 16. 자바 문자열에서 단어 찾기
- 17. RegEx 문자열에서 문자열 찾기
- 18. 문자열에서 기호 찾기 Java
- 19. 찾기 자리 내 문자열에서
- 20. JSON 문자열에서 값 찾기
- 21. 문자열에서 URL 찾기
- 22. LINQ가있는 문자열에서 단어 찾기
- 23. 문자열에서 삽입 찾기
- 24. 문자열에서 날짜 찾기
- 25. 문자열에서 문자 제거
- 26. 문자열에서 특정 문자 제거
- 27. Java의 문자열에서 문자 대체
- 28. 문자열에서 문자 제거
- 29. 문자열에서 문자 제거
- 30. 문자열에서 문자 바꾸기
시도를 게시 할 수 있으며 해결 방법을 알려 드리겠습니다. – dasblinkenlight
거기에 내가 편집했습니다 –
첫째, 왜 당신은 알파벳을 추가하고 있습니까? 또한 문자열의 양쪽 끝에서 동시에 반복합니다. i가 증가함에 따라, j는 감소한다. 그래서 하나의 인스턴스가 문자열 앞에서 멀어지면 다른 인스턴스는 뒤쪽에서부터 복제본을 찾습니다. 셋째,'j'는'newword.length()'대신'newword.length() - 1'에서 시작해야합니다; 그렇지 않으면'newword.charAt (j)'의 첫 번째 호출은'String'의 끝 부분을 보려고 할 것입니다. 이 세 가지 문제를 해결하십시오. 아직도 붙어 있다면 다시 게시하십시오. –