zoukankan      html  css  js  c++  java
  • 【leetcode】#647 回文子串 Rust Solution

    给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

     

    示例 1:

    输入:"abc"
    输出:3
    解释:三个回文子串: "a", "b", "c"

    示例 2:

    输入:"aaa"
    输出:6
    解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

     

    提示:

        输入的字符串长度不会超过 1000 。

     1 fn count_substrings(s: String) -> i32 {
     2     let len = s.len();
     3     let temp_str = &s as &str;
     4     let mut count = 0;
     5     for gap in 1..=len {
     6         for index in 0..len {
     7             if len < index + gap { continue; }
     8             let inner_str = &temp_str[index..index+gap];
     9             if is_palindromic(inner_str) {
    10                 count += 1;
    11             }
    12         }
    13     }
    14     count
    15 }
    16 
    17 
    18 fn is_palindromic(substring: &str) -> bool {
    19     // let len = substring.len();
    20     //
    21     // for i in 0..(len / 2) {
    22     //     let lhs = &substring[i..i + 1];
    23     //     let rhs = &substring[len - i - 1..len - i];
    24     //     if lhs.eq(rhs) {
    25     //         continue;
    26     //     } else {
    27     //         return false;
    28     //     }
    29     // }
    30     // //遍历完所有正确返回true
    31     // true
    32 
    33     let temp = &substring
    34         .chars()
    35         .rev()
    36         .collect::<String>()[..];
    37 
    38     temp == substring
    39 }
    40 
    41 fn main() {
    42     // let ret = is_palindromic("ab");
    43     // aaaaa == 15
    44     // aaa == 6
    45     // abc == 3
    46     let s = String::from("aaaaa"); // 15
    47     let ret = count_substrings(s);
    48     println!("ret = {}", ret);
    49 }

    C++ Solution 超时

     1 learn string operator
     2 1. 截取子串
     3        s.substr(pos, n)    截取s中从pos开始(包括0)的n个字符的子串,并返回
     4        s.substr(pos)        截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回
     5 2. 替换子串
     6        s.replace(pos, n, s1)    用s1替换s中从pos开始(包括0)的n个字符的子串
     7 3. 查找子串
     8        s.find(s1)         查找s中第一次出现s1的位置,并返回(包括0)
     9        s.rfind(s1)        查找s中最后次出现s1的位置,并返回(包括0)
    10        s.find_first_of(s1)       查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
    11        s.find_last_of(s1)       查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
    12        s.fin_first_not_of(s1)         查找s中第一个不属于s1中的字符的位置,并返回(包括0)
    13        s.fin_last_not_of(s1)         查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
    14  * */
    15 
    16 
    17 
    18 #include <iostream>
    19 #include <algorithm>
    20 #include <string>
    21 
    22 using  namespace  std;
    23 bool is_palindromic(string s);
    24 
    25 int countSubstrings(string s) {
    26     int length  = s.length();
    27 //    cout << "length = " << length << endl;
    28     int count = 0;
    29     for (int gap = 1; gap <= length; gap++){
    30         for (int index = 0; index < length; index++){
    31             if (length < index + gap)  {
    32                 continue;
    33             }
    34             string  inner_str = s.substr(index, gap);
    35 //            cout << "inner_str = " << inner_str << endl;
    36             if (is_palindromic(inner_str)) {
    37                 count += 1;
    38             }
    39         }
    40     }
    41     return count;
    42 }
    43 
    44 bool is_palindromic(string s) {
    45     int length = s.length();
    46     for (int i = 0; i < length/2; i++){
    47         string lhs = s.substr(i,1);
    48         string rhs = s.substr(length-i-1,1);
    49         if (lhs == rhs) {
    50             continue;
    51         }else {
    52             return false;
    53         }
    54     }
    55     return true;
    56 }
    57 
    58 
    59 int main() {
    60     string  s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    61 
    62     int ret = countSubstrings(s);
    63 //    bool ret = is_palindromic(s);
    64     cout << "ret = " << ret << endl;
    65     return 0;
    66 }

    Python Soluton 超时

     1 # 代码超时
     2 #
     3 #
     4 # python string slice
     5 # 
     6 # 切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。
     7 #
     8 # 格式: [start:end:step]
     9 #
    10 # • [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
    11 # • [start:] 从start 提取到结尾
    12 # • [:end] 从开头提取到end - 1
    13 # • [start:end] 从start 提取到end - 1
    14 # • [start:end:step] 从start 提取到end - 1,每step 个字符提取一个
    15 # • 左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1
    16 #
    17 #
    18 #
    19 # 几个特别的examples 如下:
    20 #
    21 # 提取最后N个字符:
    22 #
    23 # >>> letter = 'abcdefghijklmnopqrstuvwxyz'
    24 # >>> letter[-3:]
    25 # 'xyz'
    26 #
    27 # 从开头到结尾,step为N:
    28 #
    29 # >>> letter[::5]
    30 # 'afkpuz'
    31 #
    32 # 将字符串倒转(reverse), 通过设置步长为负数:
    33 #
    34 # >>> letter[::-1]
    35 # 'zyxwvutsrqponmlkjihgfedcba'
    36 
    37 
    38 
    39 def is_palindromic(s: str) -> bool:
    40     length: int = len(s)
    41     for i in range(length // 2):
    42         lhs = s[i:i + 1]
    43         rhs = s[length - i - 1:length - i]
    44         if lhs == rhs:
    45             continue
    46         else:
    47             return False
    48     return True
    49 
    50 
    51 def countSubstrings(s: str) -> int:
    52     # def is_palindromic(s: str) -> bool:
    53     #     _length: int = len(s)
    54     #     for i in range(_length // 2):
    55     #         lhs = s[i:i + 1]
    56     #         rhs = s[_length - i - 1:_length - i]
    57     #         if lhs == rhs:
    58     #             continue
    59     #         else:
    60     #             return False
    61     #     return True
    62 
    63     length: int = len(s)
    64     count = 0
    65     for gap in range(length):
    66         new_gap = gap + 1
    67         for index in range(length):
    68             if length < index + new_gap:
    69                 continue
    70             inner_str = s[index:index + new_gap]
    71             if is_palindromic(inner_str):
    72                 count += 1
    73 
    74     return count
    75 
    76 
    77 if __name__ == "__main__":
    78     # print("is_palindromic {}".format(is_palindromic("abc")))
    79 
    80     print("ret = {}".format(countSubstrings("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")))

    Github Link: https://github.com/DaviRain-Su/leetcode_solution/tree/master/palindromic_substrings

  • 相关阅读:
    测试
    【八十一题题目合集 微软面试100题 第八十一题】
    排队问题 【微软面试100题 第八十题】
    fiddler 正则 重定向IP
    浮动div 内部元素 垂直居中
    css 诡异的多出来的几像素
    前端开发 注意问题(1)input type=“number”
    实时监听input输入
    sudo执行命令时环境变量被重置的解决方法
    laravel4 中 Redirect::intended和Redirect::guest的关系及用法
  • 原文地址:https://www.cnblogs.com/Davirain/p/13544158.html
Copyright © 2011-2022 走看看