검 지 offer - 58. 단어 순 서 를 뒤 집 기 - 분석 및 코드 (자바)

검 지 offer - 58. 단어 순 서 를 뒤 집기 - 분석 및 코드 [자바]
  • 하나, 제목
  • 2. 분석 및 코드
  • 1. 두 번 뒤 집기
  • (1) 사고방식
  • (2) 코드
  • (3) 결과
  • 2. 직접 연결
  • (1) 사고방식
  • (2) 코드
  • (3) 결과

  • 3. 기타
  • 제목
    소 손님 은 최근 에 신 입 사원 인 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.
    기타
    잠시 없다.

    좋은 웹페이지 즐겨찾기