Leetcode 문제 풀이 - 데이터 구조의 문자열

10649 단어
1. 문자열 순환 시 프 트 포함
  • 2. 문자열 순환 이동
  • 3. 문자열 의 단어 뒤 집기
  • 4. 두 문자열 에 포 함 된 문자 가 똑 같은 지 여부
  • 5. 문자 집합 으로 구 성 될 수 있 는 답장 문자열 의 최대 길 이 를 계산 합 니 다
  • .
  • 6. 문자열 동 구성
  • 7. 답장 문자열 개수
  • 8. 하나의 정수 가 회 문수 인지 판단 하기
  • 9. 바 이 너 리 문자열 의 연속 1 과 연속 0 수량 이 같은 하위 문자열 개수
  • 를 통계 합 니 다.
    1. 문자열 순환 시 프 트 포함
    프로 그래 밍 의 아름다움 3.1
    s1 = AABCD, s2 = CDAA
    Return : true

    두 문자열 s1 과 s2 를 지정 하고 s2 가 s1 에 의 해 순환 적 으로 자 리 를 옮 길 수 있 는 문자열 이 포함 되 어 있 는 지 확인 해 야 합 니 다.
    s1 순환 시 위 를 옮 긴 결 과 는 s1s 1 의 하위 문자열 이 므 로 s2 가 s1s 1 의 하위 문자열 인지 판단 하면 됩 니 다.
    2. 문자열 순환 시 프 트
    프로 그래 밍 의 아름다움 2.17
    s = "abcd123" k = 3
    Return "123abcd"

    문자열 을 오른쪽으로 K 비트 로 이동 합 니 다.
    abcd 123 의 abcd 와 123 을 단독으로 뒤 집어 dcba 321 을 얻 은 후 전체 문자열 을 뒤 집어 123 abcd 를 얻 습 니 다.
    3. 문자열 에서 단어의 뒤 집기
    프로그래머 코드 면접 안내
    s = "I am a student"
    Return "student a am I"

    모든 단 어 를 뒤 집 은 다음 문자열 전 체 를 뒤 집 습 니 다.
    4. 두 문자열 에 포 함 된 문자 가 똑 같은 지 여부
    242. Valid Anagram (Easy)
    s = "anagram", t = "nagaram", return true.
    s = "rat", t = "car", return false.

    HashMap 으로 문자 와 출현 횟수 를 매 핑 한 다음 두 문자열 에 나타 난 문자 의 수량 이 같 는 지 비교 할 수 있 습 니 다.
    이 문제 의 문자열 은 26 개의 소문 자 만 포함 되 어 있 기 때문에 길이 가 26 인 정수 그룹 을 사용 하여 문자열 에 나타 난 문 자 를 통계 할 수 있 으 며, HashMap 을 사용 하지 않 습 니 다.
    public boolean isAnagram(String s, String t) {
        int[] cnts = new int[26]; for (char c : s.toCharArray()) { cnts[c - 'a']++; } for (char c : t.toCharArray()) { cnts[c - 'a']--; } for (int cnt : cnts) { if (cnt != 0) { return false; } } return true; }

    5. 문자 집합 으로 구 성 될 수 있 는 답장 문자열 의 최대 길 이 를 계산 합 니 다.
    409. Longest Palindrome (Easy)
    Input : "abccccdd"
    Output : 7
    Explanation : One longest palindrome that can be built is "dccaccd", whose length is 7.

    길이 가 256 인 정형 배열 을 사용 하여 모든 문자 에 나타 난 개 수 를 통계 하고 모든 문 자 는 짝수 로 답장 문자열 을 구성 할 수 있 습 니 다.
    답장 문자열 의 가장 중간 에 있 는 문 자 는 단독으로 나타 날 수 있 기 때문에 단독 문자 가 있 으 면 가장 중간 에 놓 습 니 다.
    public int longestPalindrome(String s) {
        int[] cnts = new int[256]; for (char c : s.toCharArray()) { cnts[c]++; } int palindrome = 0; for (int cnt : cnts) { palindrome += (cnt / 2) * 2; } if (palindrome < s.length()) { palindrome++; //       s               ,                } return palindrome; }

    6. 문자열 동 구성
    205. Isomorphic Strings (Easy)
    Given "egg", "add", return true.
    Given "foo", "bar", return false.
    Given "paper", "title", return true.

    마지막 으로 나타 난 위 치 를 기록 합 니 다. 두 문자열 의 문자 가 마지막 에 나타 난 위치 가 같다 면 같은 구조 에 속 합 니 다.
    public boolean isIsomorphic(String s, String t) {
        int[] preIndexOfS = new int[256]; int[] preIndexOfT = new int[256]; for (int i = 0; i < s.length(); i++) { char sc = s.charAt(i), tc = t.charAt(i); if (preIndexOfS[sc] != preIndexOfT[tc]) { return false; } preIndexOfS[sc] = i + 1; preIndexOfT[tc] = i + 1; } return true; }

    7. 답장 하위 문자열 개수
    647. Palindromic Substrings (Medium)
    Input: "aaa"
    Output: 6
    Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".

    문자열 의 한 사람 부터 하위 문자열 을 확장 하려 고 시도 합 니 다.
    private int cnt = 0;
    
    public int countSubstrings(String s) { for (int i = 0; i < s.length(); i++) { extendSubstrings(s, i, i); //      extendSubstrings(s, i, i + 1); //      } return cnt; } private void extendSubstrings(String s, int start, int end) { while (start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end)) { start--; end++; cnt++; } }

    8. 하나의 정수 가 답문 수 인지 아 닌 지 를 판단 한다.
    9. Palindrome Number (Easy)
    추가 공간 을 사용 할 수 없고 정 수 를 문자열 로 변환 하여 판단 할 수 없습니다.
    정 수 를 좌우 두 부분 으로 나 누고 오른쪽 부분 을 옮 긴 다음 에 이 두 부분 이 같 는 지 판단 해 야 한다.
    public boolean isPalindrome(int x) {
        if (x == 0) { return true; } if (x < 0 || x % 10 == 0) { return false; } int right = 0; while (x > right) { right = right * 10 + x % 10; x /= 10; } return x == right || x == right / 10; }

    9. 바 이 너 리 문자열 의 연속 1 과 연속 0 수량 이 같은 하위 문자열 개 수 를 통계 합 니 다.
    696. Count Binary Substrings (Easy)
    Input: "00110011"
    Output: 6
    Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10", "0011", and "01".
    public int countBinarySubstrings(String s) {
        int preLen = 0, curLen = 1, count = 0; for (int i = 1; i < s.length(); i++) { if (s.charAt(i) == s.charAt(i - 1)) { curLen++; } else { preLen = curLen; curLen = 1; } if (preLen >= curLen) { count++; } } return count; }

    다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009133.html

    좋은 웹페이지 즐겨찾기