문제 5: 문자열에 대한 몇 가지 흥미로운 작업


다섯 번째 기간
추신: 각 질문에 대한 해결책은 고유하지 않습니다. 토론을 환영합니다! 각 질문 후에는 질문을 분석하고 해결하는 데 도움이 되는 분석이 있습니다.답은 맨 아래에 있으며 블로거는 매일 계속 업데이트합니다.

1. 공백 바꾸기

제목 설명
문자열 s의 각 공백을 "%20"으로 대체하는 함수를 구현하십시오.
예 1:
입력: s = "We are happy."
출력: "We%20are%20happy."
예 2:
입력: s = "hello world."
출력: s = "hello%20world."
구문 분석:
In Java We 문자열 자체는 직접 변경할 수 없으므로 새 문자열에서만 실현될 수 있음을 알아야 합니다.
그래서 우리는 새로운 문자열을 만들고, 이전 문자열을 순회하고, 공백일 때 새 문자열에 %20을 추가하고, 공백이 아니면 이 문자를 직접 추가하고, 마지막으로 순회를 완료하고 문자를 얻습니다. 문자열은 우리가 원하는 결과입니다. (방법 1)
참고:

  • 새로운 문자열을 생성하기 위해서는 String 타입을 생성할 수 없으며, String은 추가될 때 항상 새로운 문자열을 생성하여 많은 메모리를 소모하기 때문에 StringBuilder를 생성해야 합니다.
    - 라이브러리 메서드 replace()를 사용할 수도 있지만 이렇게 하면 질문을 빗나가는 의미가 없어지고 인터뷰 중에 면접관이 그런 코드를 보고 싶어하지 않습니다. (방법 2)

2. 현의 왼쪽 회전

제목 설명
문자열의 왼쪽 회전 동작은 문자열 앞의 여러 문자를 문자열의 끝으로 옮기는 것입니다. 문자열 왼쪽 회전 동작 기능을 구현하는 기능을 정의하십시오. 예를 들어 문자열 "abcdefg"와 숫자 2를 입력하면 함수는 왼쪽으로 2비트 회전하여 얻은 결과 "cdefgab"를 반환합니다.
예 1:
입력: s = "abcdefg", k = 2
출력: "cdefgab"
예 2:
입력: s = "lrloseumgh", k = 6
출력: "umghlrlose"
분석:
이 질문에는 까다로운 방법이 있습니다. substring() 라이브러리 메서드를 호출하여 문자열을 슬라이스하는 슬라이스 함수를 적용합니다. (방법 1).
이 방법은 인터뷰 중에 허용되지 않을 수 있으므로 다른 방법을 사용할 수 있습니다.
traversal splicing을 나열하고 StringBuilder의 문자열을 만들고 k + 1을 끝 문자에 순차적으로 연결한 다음 첫 번째 문자를 k에 연결하고 마지막으로 문자열을 반환합니다. (방법 2)
문자를 회전시켜도 되지만 더 번거로운데 먼저 문자열을 문자배열로 변환한 후 0 ~ k-1, k ~ arr.length - 1 좌표 요소를 회전시키고 마지막으로 전체 배열을 회전한 다음 이 배열을 문자열로 변환하면 원하는 결과를 얻을 수 있습니다. (방법 3)

3. 응답 코드

3.1 공백 바꾸기

	//方法一
    public String replaceSpace(String s) {
        StringBuilder stringbuilder = new StringBuilder();
        int len = s.length();
        for(int i = 0; i < len; i++){
            char ch = s.charAt(i);
            if(ch == ' '){
                stringbuilder.append("%20");
            }else{
                stringbuilder.append(ch);
            }
        }
        return stringbuilder.toString();
    }
    
    //方法二 
	public String replaceSpace(String s) {
    	return s.replace(" ", "%20");
	}

3.2 현의 왼쪽 회전

	//方法一
    public String reverseLeftWords(String s, int n) {
        return s.substring(n) + s.substring(0, n); 
    }
    
    //方法二
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++){
            res.append(s.charAt(i));
        }
        for(int i = 0; i < n; i++){
            res.append(s.charAt(i));
        }    
        return res.toString();
    }
       
    //方法三
    public String reverseLeftWords(String s, int n) {
        char[] arr = s.toCharArray();
        reverse(arr, 0, n - 1);
        reverse(arr, n, arr.length - 1);
        reverse(arr, 0, arr.length - 1);
        s = new String(arr);
        return s;
    }
    public void reverse(char[] arr, int left, int right){
        while(left < right){
            char tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }

추천

출처blog.csdn.net/weixin_73392477/article/details/131110815