검 지 offer - 58. 단어 순 서 를 뒤 집 기 - 분석 및 코드 (자바)
10853 단어 데이터 구조 와 알고리즘검지 제공Java해제
소 손님 은 최근 에 신 입 사원 인 Fish 가 왔 습 니 다. 매일 아침 영어 잡지 한 권 을 들 고 공책 에 문장 을 씁 니 다.동료 Cat 은 Fish 가 쓴 내용 에 흥 미 를 느 꼈 다. 어느 날 그 는 Fish 에 게 빌려 와 뒤 져 보 았 지만 그 뜻 을 읽 지 못 했다.예 를 들 어 'student. a am I'.나중에 야 이 녀석 이 문장 단어의 순 서 를 뒤 집 었 다 는 것 을 깨 달 았 다. 정확 한 문장 은 'I am a student' 일 것 이다.Cat 은 이 단어 들 의 순 서 를 하나하나 뒤 집 는 데 익숙 하지 않 습 니 다. 당신 은 그 를 도와 줄 수 있 습 니까?
2. 분석 및 코드
1. 두 번 뒤 집기
(1) 사고방식
먼저 각 단 어 를 뒤 집 고 전체 문장 을 두 번 뒤 집 는 것 이 목 표를 실현 하 는 것 이다.
(2) 코드
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
char[] chstr = str.toCharArray();
int l = 0, length = str.length();
for (int i = 0; i < length; i++) {
if (chstr[i] == ' ') {
Reverse(chstr, l, i - 1);
l = i + 1;
}
if (i == length - 1 && l < i)
Reverse(chstr, l, length - 1);
}
Reverse(chstr, 0, length - 1);
return String.valueOf(chstr);
}
public void Reverse(char[] chstr, int l, int r) {
int m = (l + r) >> 1;
for (int i = l; i <= m; i++) {
char temp = chstr[i];
chstr[i] = chstr[l + r - i];
chstr[l + r - i] = temp;
}
return;
}
}
(3) 결과
실행 시간: 21ms, 메모리 사용량: 9648 k.
2. 직접 연결
(1) 사고방식
보조 공간 을 사용 할 수 있다 면 원 문자열 을 직접 연결 하면 됩 니 다.
(2) 코드
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
String[] substr = str.split(" ");
String ans = substr[substr.length - 1];
for (int i = substr.length - 2; i >= 0; i--)
ans = ans.concat(" " + substr[i]);
return ans;
}
}
(3) 결과
실행 시간: 20ms, 메모리 사용량: 9360 k.
기타
잠시 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.