Chuyển đến nội dung chính

Tìm Chuỗi Đối Xứng Dài Nhất

Đề Bài:Cho một chuỗi string S, tìm chuỗi đối xứng dài nhất trong String S

Ví Dụ 1:

Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.

Ví Dụ 2:

Input: s = "cbbd"
Output: "bb"

Lời Giải:

// Step 1: Use for loop, to check at each position in the loop
// Step 2: At each pos in the string, get a possible symetric string
// Step 3: Use find max algorithm, to get the longest symetric string

string sub_palindromic_1(string s, int pos) // aba
{
   int i = 1;
   while ((pos >= i) && (pos + i) < s.length())
   {
      if (s[pos + i] != s[pos - i])
      {
         break;
      }
      i++;
   }

   return s.substr(pos - i + 1, 2 * i - 1);
}

string sub_palindromic_2(string s, int pos) // abba
{
   int j = 0;
   while ((pos + j + 1 < s.length()) && (pos >= j))
   {
      if ((s[pos - j] != s[pos + j + 1]))
      {
         break;
      }
      j++;
   }
   return s.substr(pos - j + 1, 2 * j);
}

string longestPalindrome(string s)
{
   string s_Max = "";
   if (s.length() <= 1)
   {
      s_Max = s;
   }
   else
   {
      for (int i = 0; i < s.length(); i++)
      {
         string s_i;
         if (i == 0)
         {
            if (s[i] == s[i + 1])
            {
               s_i = sub_palindromic_2(s, i);
            }
         }
         else if ((s[i - 1] == s[i + 1]) && (s[i] == s[i + 1]))
         {
            string s1 = sub_palindromic_1(s, i);
            string s2 = sub_palindromic_2(s, i);
            if (s1.length() < s2.length())
            {
               s_i = s1;
            }
            else
            {
               s_i = s2;
            }
         }
         else if (s[i-1] == s[i+1])
         {
            s_i = sub_palindromic_1(s, i);
         }
         else if (s[i] == s[i+1])
         {
            s_i = sub_palindromic_2(s, i);
         }
         else
         {
            s_i.push_back(s[i]);
         }
         if (s_i.length() > s_Max.length())
         {
            s_Max = s_i;
         }
      }
   }
   return s_Max;
}

Cách 2:

class Solution
{
public:
   Solution();
   ~Solution();

   string longestPalindrome(string s) {
      if (s.length() < 1) return "";
      int start = 0, end = 0;
      for (int i = 0; i < s.length(); i++) {
         int len1 = expandAroundCenter(s, i, i);
         int len2 = expandAroundCenter(s, i, i + 1);
         int len = std::max(len1, len2);
         if (len > end - start) {
            start = i - (len - 1) / 2;
            end = i + len / 2;
         }
      }
      return s.substr(start, end + 1);
   }

private:
   int expandAroundCenter(string s, int left, int right) {
      int L = left, R = right;
      while (L >= 0 && R < s.length() && s[L] == s[R]) {
         L--;
         R++;
      }
      return R - L - 1;
   }

};

 

The post Tìm Chuỗi Đối Xứng Dài Nhất first appeared on Techacademy.



source https://techacademy.edu.vn/tim-chuoi-doi-xung-dai-nhat/

Nhận xét

Bài đăng phổ biến từ blog này

Cách Vẽ Hình Trong Scratch

Hãy cùng Techacademy tìm hiểu cách vẽ hình trong lập trình Scratch nhé! Tại đây bạn sẽ biết thêm nhiều điều thú vị và hấp dẫn về cách vẽ các loại hình trong Scratch. I. Cách Vẽ Hình Vuông Trong Scratch Trong bài viết này mình sẽ hướng dẫn các bạn cách vẽ hình vuông trong Scratch đồng thời sử dụng kĩ thuật quay hợp lý để nhân bản tạo thành những hình vẽ đẹp đã ra trong các kì thi tin học trẻ phần vẽ hình bằng Scratch. Hãy tham khảo với onthihsg ngay nhé. + Thủ tục con vẽ hình vuông trong Scratch Trước hết ta cùng xây dựng một mảnh ghép để vẽ hình vuông với tham số là cạnh của hình vuông như sau: Cách Vẽ Hình Vuông Trong Scratch Chỉ cần một vòng lặp lại 4 lần việc vẽ một cạnh và xoay 90 độ là xong, quá đơn giản phải không nào + Vẽ các hình phức tạp hơn từ hình vuông Bây giờ ta hãy phát triển để vẽ hai hình trong đề thi tin học trẻ Đông Triều năm 2019 nào Cách Vẽ Hình Vuông Trong Scratch Nhìn hình ta thấy hình tạo thành từ 5 hình vuông vì vậy ta sẽ gọi 5 lần thủ tục vẽ h...

Biến Trong PHP

Khái niệm về biến trong PHP là kiến thức nền tảng trong lập trình PHP mà hầu như lập trình viên nào cũng phải học đầu tiên. Trong bài này chúng ta sẽ đi tìm hiểu khái niệm thế nào là biến. I. Biến trong php để làm gì Bạn còn nhớ môn Đại Số ở  Trường Không ? Dạng như , x = 1 , y = 2 , z =3 Bạn còn nhớ với mỗi từ ta có thể gán 1 giá trị (vd : x = 2 , y = 123 , z = 52 v.v ) và bạn sẽ dùng mấy thông tin đó để tính 1 giá trị nào đó của d chẳng hạn . Tất cả những cái trên được gọi là Biến PHP , và biến được dùng để giữ 1 giá trị nhất định (x=2) hoặc là các bài toán như ( d = a+b+c ) trong đó a,b,c là các hằng số có giá trị bất kỳ ( vd : a = 1 , b = 2 , c = 3 thì d = a + b + c = 6 ) Ví dụ: <!DOCTYPE html> <html> <body> <?php //Đây là chú thích 1 dòng /* Đây là chú thích Nhiều Dòng */ ?> </body> </html> Biến PHP Với đại số, các biến PHP được sử dụng để giữ các giá trị hoặc biểu thức. Một biến có thể có một tên ngắn, như x, hoặc một cái tên dài ...

Biến Trong PHP

Khái niệm về biến trong PHP là kiến thức nền tảng trong lập trình PHP mà hầu như lập trình viên nào cũng phải học đầu tiên. Trong bài này chúng ta sẽ đi tìm hiểu khái niệm thế nào là biến. I. Biến trong php để làm gì Bạn còn nhớ môn Đại Số ở  Trường Không ? Dạng như , x = 1 , y = 2 , z =3 Bạn còn nhớ với mỗi từ ta có thể gán 1 giá trị (vd : x = 2 , y = 123 , z = 52 v.v ) và bạn sẽ dùng mấy thông tin đó để tính 1 giá trị nào đó của d chẳng hạn . Tất cả những cái trên được gọi là Biến PHP , và biến được dùng để giữ 1 giá trị nhất định (x=2) hoặc là các bài toán như ( d = a+b+c ) trong đó a,b,c là các hằng số có giá trị bất kỳ ( vd : a = 1 , b = 2 , c = 3 thì d = a + b + c = 6 ) Ví dụ: <!DOCTYPE html> <html> <body> <?php //Đây là chú thích 1 dòng /* Đây là chú thích Nhiều Dòng */ ?> </body> </html> Biến PHP Với đại số, các biến PHP được sử dụng để giữ các giá trị hoặc biểu thức. Một biến có thể có một tên ngắn, như x, hoặc một cái tên dài ...