459. Repeated Substring Pattern

LeetCode easy original: C# #csharp #easy #leetcode #prefix-sum #string #tree
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

Дана chuỗi s, проверьте, может ли она быть построена путем взятия подстроки и добавления нескольких копий этой подстроки друг за другом.

Ví dụ:

Input: heights = [2,1,5,6,2,3]

Output: 10

Explanation: The above is a histogram where width of each bar is 1.

The largest rectangle is shown in the red area, which has an area = 10 units.

C# lời giải

đã khớp/gốc
public class Solution {
    public bool RepeatedSubstringPattern(string s) {
        int n = s.Length;
        for (int i = 1; i <= n / 2; i++) {
            if (n % i == 0) {
                string pattern = "";
                string substr = s.Substring(0, i);
                for (int j = 0; j < n / i; j++) {
                    pattern += substr;
                }
                if (s == pattern) {
                    return true;
                }
            }
        }
        return false;
    }
}

C++ lời giải

bản nháp tự động, xem lại trước khi gửi
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public bool RepeatedSubstringPattern(string s) {
        int n = s.size();
        for (int i = 1; i <= n / 2; i++) {
            if (n % i == 0) {
                string pattern = "";
                string substr = s.Substring(0, i);
                for (int j = 0; j < n / i; j++) {
                    pattern += substr;
                }
                if (s == pattern) {
                    return true;
                }
            }
        }
        return false;
    }
}

Java lời giải

đã khớp/gốc
class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int n = s.length();
        for (int i = 1; i <= n / 2; i++) {
            if (n % i == 0) {
                StringBuilder pattern = new StringBuilder();
                for (int j = 0; j < n / i; j++) {
                    pattern.append(s.substring(0, i));
                }
                if (s.equals(pattern.toString())) {
                    return true;
                }
            }
        }
        return false;
    }
}

JavaScript lời giải

đã khớp/gốc
class Solution {
    repeatedSubstringPattern(s) {
        const n = s.length;
        for (let i = 1; i <= n / 2; i++) {
            if (n % i === 0) {
                let pattern = '';
                const substr = s.substring(0, i);
                for (let j = 0; j < n / i; j++) {
                    pattern += substr;
                }
                if (s === pattern) {
                    return true;
                }
            }
        }
        return false;
    }
}

Python lời giải

đã khớp/gốc
class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        n = len(s)
        for i in range(1, n // 2 + 1):
            if n % i == 0:
                pattern = s[:i] * (n // i)
                if s == pattern:
                    return True
        return False

Go lời giải

đã khớp/gốc
package main

import "strings"

func repeatedSubstringPattern(s string) bool {
    n := len(s)
    for i := 1; i <= n/2; i++ {
        if n%i == 0 {
            pattern := strings.Repeat(s[:i], n/i)
            if s == pattern {
                return true
            }
        }
    }
    return false
}

Algorithm

Создайте целочисленную переменную n, равную длине строки s.

Итерация по всем префиксным substringм длины i от 1 до n/2:

Если i делит n, объявите пустую строку pattern. Используйте внутренний цикл, который выполняется n/i раз для конкатенации подстроки, сформированной из первых i символов строки s.

Если pattern равен s, вернуть true.

Если нет подстроки, которую можно повторить для формирования s, вернуть false.

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.