Leetcode 문제 풀이 문자열 의 반전 문자열
7640 단어 데이터 구조
1. 문제 설명
함 수 를 만 드 는 것 은 입력 한 문자열 을 반전 시 키 는 역할 을 합 니 다.입력 문자열 은 문자 배열 char [] 형식 으로 표 시 됩 니 다.
다른 배열 에 추가 공간 을 할당 하지 마 십시오. 입력 배열 을 제자리 에서 수정 하고 O (1) 의 추가 공간 으로 이 문 제 를 해결 해 야 합 니 다.
배열 의 모든 문자 가 ASCII 메타 의 인쇄 가능 한 문자 라 고 가정 할 수 있 습 니 다.
예시 1:
입력: ["h", "e", "l", "l", "o"] 출력: ["o", "l", "l", "e", "h"]
2. 문제 분석
직접 두 냥 으로 문 자 를 교환 하면 된다.두 바늘 을 사용 하거나.
3. 코드
class Solution {
public void reverseString(char[] s) {
char temp;
for(int i=0;i
2. 반전 문자열 2
1. 문제 설명
문자열 과 정수 k 를 지정 합 니 다. 문자열 의 시작 부분 에서 계산 하 는 모든 2k 문자 의 앞 k 문 자 를 반전 시 켜 야 합 니 다.k 글자 보다 적 게 남 으 면 나머지 모든 것 을 반전 시 킵 니 다.2k 보다 작 지만 k 자 이상 이거 나 같은 문자 가 있 으 면 앞의 k 자 를 반전 시 키 고 나머지 문 자 를 그대로 유지 합 니 다.
예시:
입력: s = "abcdefg", k = 2 출력: "bacdfeg" 요구:
이 문자열 은 소문 자 만 포함 되 어 있 습 니 다.주어진 문자열 의 길이 와 k 는 [1, 10000] 범위 내 에 있 습 니 다.
출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/reverse-string-ii
2. 문제 분석
반전 을 반복 합 니 다. 포인터 cur 를 설정 하면 [cur, cur + k) 부분 이 반전 되 고 [cur + k, cur + 2k) 는 변 하지 않 습 니 다. 그리고 포인터 가 2k 를 오른쪽으로 이동 하 는 동시에 나머지 문자 개 수 는 2k 개 를 줄 입 니 다. 문자열 substring (start, end) 방법 으로 문자열 [start, end) 부분 을 캡 처 하여 해당 동작 을 하고 StringBuffer 의 reverse () 방법 으로 반전 합 니 다.
3. 코드
class Solution {
public String reverseStr(String s, int k) {
int l = s.length();
int cur = 0;
StringBuffer sb = new StringBuffer();
while(l>=2*k){
sb.append(new StringBuffer(s.substring(cur, cur+k)).reverse().append(s.substring(cur+k, cur+2*k)));
//substring(start,end) start...end-1
l = l-2*k; //l ,
cur = cur+2*k; //
}
if(l
3. 반전 문자열 의 모음 자모
1. 문제 설명
문자열 을 입력 하고 이 문자열 의 모음 자 모 를 반전 시 키 는 함 수 를 만 듭 니 다.
예시 1:
입력: "hello" 출력: "holle"
2. 문제 분석
헤더 포인 터 를 설정 합 니 다. String 클래스 는 변경 할 수 없 기 때문에 문자열 그룹 을 새로 만 듭 니 다. 마지막 으로 문자열 로 변환 하면 됩 니 다.
3. 코드
import java.util.*;
class Solution {
private final static Set set = new HashSet<>(Arrays.asList('A','E','I','O','U','a','e','i','o','u'));
public String reverseVowels(String s) {
/* **/
int head = 0;
int tail = s.length()-1;
/* , String **/
char[] rs = new char[tail+1];
while(head<=tail){
char ch = s.charAt(head);
char ct = s.charAt(tail);
if(!set.contains(ch)){
rs[head] = ch;
head++;
}else if(!set.contains(ct)){
rs[tail] = ct;
tail--;
}else{
rs[head] = ct;
head++;
rs[tail] = ch;
tail--;
}
}
return new String(rs);
}
}
4. 알파벳 만 반전
1. 문제 설명
문자열 S 를 지정 하고 '반전 후' 문자열 을 되 돌려 줍 니 다. 알파벳 이 아 닌 문자 가 제자리 에 있 고 모든 자모의 위치 가 반전 되 었 습 니 다.
예시 1:
입력: "ab - cd" 출력: "dc - ba" 예제 2:
입력: "a - bC - dEf - ghIj" 출력: "j - ih - gfE - dCba" 예제 3:
입력: "Test1ng - Reet = code - Q!" 출력: "Qedo1ct - eLg = ntse - T!"
알림:
S. length < = 100 33 < = S [i]. ASCIIcode < = 122 S 에는 \ or 가 포함 되 지 않 습 니 다. "
출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/reverse-only-letters
2. 문제 분석
해법 1: 예 를 들 어 네 가지 방법, 두 바늘 을 옮 겨 다 닙 니 다.
3. 코드
해법 1:
class Solution {
public String reverseOnlyLetters(String S) {
int head = 0;
int tail = S.length()-1;
char[] rs = new char[tail+1]; //
while(head<=tail){
char c1 = S.charAt(head);
char c2 = S.charAt(tail);
if(!Character.isLetter(c1)){
rs[head] = c1;
head++;
}else if(!Character.isLetter(c2)){
rs[tail] = c2;
tail--;
}else{
rs[head] = c2;
head++;
rs[tail] = c1;
tail--;
}
}
return new String(rs);
}
}
해법 2:
class Solution {
public String reverseOnlyLetters(String S) {
Stack letters = new Stack();
for (char c: S.toCharArray())
if (Character.isLetter(c))
letters.push(c);
StringBuilder ans = new StringBuilder();
for (char c: S.toCharArray()) {
if (Character.isLetter(c))
ans.append(letters.pop());
else
ans.append(c);
}
return ans.toString();
}
}
5. 반전 문자열 의 단어
1. 문제 설명
문자열 의 모든 단 어 를 하나씩 뒤 집 는 문자열 을 지정 합 니 다.
예시 1:
입력: "the sky is blue" 출력: "blue is sky the" 예제 2:
입력: "hello World!" 출력: "World! hello" 설명: 입력 문자열 은 앞 이나 뒤에 빈 칸 을 포함 할 수 있 지만 반전 후의 문 자 는 포함 할 수 없습니다. 예제 3:
입력: "a good example" 출력: "example good a" 설명: 두 단어 사이 에 빈 칸 이 있 으 면 반전 후 단어 사이 의 빈 칸 을 하나만 포함 하 는 것 으로 줄 입 니 다.
설명:
빈 칸 이 없 는 문 자 는 하나의 단 어 를 구성 합 니 다. 입력 문자열 은 앞 이나 뒤에 빈 칸 을 포함 할 수 있 지만, 반 전 된 문 자 는 포함 할 수 없습니다. 두 단어 사이 에 빈 칸 이 있 으 면 반 전 된 단어 사이 의 빈 칸 을 하나만 포함 하 는 것 으로 줄 입 니 다.
출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/reverse-words-in-a-string
2. 문제 분석
이 문제 의 난점 은 두 단어 사이 에 빈 칸 이 남아 있 는 경우 입 니 다. 문자열 의 split 함 수 를 이용 하여 문자열 배열 을 얻 을 수 있 습 니 다. 주의 "a good example"돌아 오 는 배열 에 빈 문자열 이 포함 되 어 있 습 니 다. 이것 이 함정 입 니 다. 문자열 배열 의 끝 에서 부터 StringBuffer 에 추가 하면 반전 이 완 료 됩 니 다. 마지막 으로 StringBuffer 를 String 으로 변환 합 니 다."
3. 코드
class Solution {
public String reverseWords(String s) {
String[] words = s.split(" ");
StringBuffer sb = new StringBuffer();
for(int i=words.length-1;i>=0;i--){
if(words[i].length()!=0){ //
sb.append(words[i]);
sb.append(" ");
}
}
return sb.toString().trim(); //trim
}
}
6. 반전 문자열 의 단어 2
1. 문제 설명
문자열 을 지정 하려 면 문자열 의 모든 단어의 문자 순 서 를 반전 시 키 고 빈 칸 과 단어의 초기 순 서 를 유지 해 야 합 니 다.
예시 1:
입력: "Let 's take LeetCode contest" 출력: "s' teL ekat edocteeL tsetnoc" 주의: 문자열 에 서 는 모든 단 어 를 하나의 빈 칸 으로 구분 하고 문자열 에 별도의 빈 칸 이 없습니다.
2. 문제 분석
문자열 의 split 함 수 를 이용 하여 문자열 배열 을 얻 을 수 있 습 니 다. 그리고 배열 의 문자열 을 반전 시 키 면 됩 니 다.
3. 코드
class Solution {
public String reverseWords(String s) {
String[] words = s.split(" ");
StringBuffer sb = new StringBuffer();
for(int i=0;i=0;j--){
sb.append(words[i].charAt(j));
}
sb.append(" ");
}
return sb.toString().trim();
}
}
물론 StringBuffer 의 reverse () 로 반전 할 수 있 습 니 다.
class Solution {
public String reverseWords(String s) {
String[] words = s.split(" ");
StringBuffer sb = new StringBuffer();
for(int i=0;i
1. 문제 설명
2. 문제 분석
3. 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.