解题思路

本题要求从字符串中提取最后一个[img]到最后一个[\img]之间的内容。我们可以通过以下步骤解决:

  1. 找到最后一个[img]的位置
  2. 找到最后一个[\img]的位置
  3. 如果两者都存在且[img]在[\img]前面,则提取这段字符串
  4. 否则返回"null"

关键点

  1. 使用字符串的查找函数
  2. 处理特殊情况(未找到匹配、位置不合法等)
  3. 注意字符串的截取范围

代码

#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
    string extractImage(string str) {
        // 查找最后一个[img]和[\img]的位置
        size_t imgStart = str.rfind("[img]");
        size_t imgEnd = str.rfind("[\\img]");
        
        // 如果没有找到任何一个标签,或者[img]在[\img]后面
        if (imgStart == string::npos || imgEnd == string::npos || imgStart > imgEnd) {
            return "null";
        }
        
        // 提取字符串
        return str.substr(imgStart, imgEnd + 6 - imgStart);
    }
};

int main() {
    string str;
    getline(cin, str);
    
    Solution solution;
    cout << solution.extractImage(str) << endl;
    
    return 0;
}
import java.util.Scanner;

public class Main {
    static class Solution {
        public String extractImage(String str) {
            // 查找最后一个[img]和[\img]的位置
            int imgStart = str.lastIndexOf("[img]");
            int imgEnd = str.lastIndexOf("[\\img]");
            
            // 如果没有找到任何一个标签,或者[img]在[\img]后面
            if (imgStart == -1 || imgEnd == -1 || imgStart > imgEnd) {
                return "null";
            }
            
            // 提取字符串
            return str.substring(imgStart, imgEnd + 6);
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        
        Solution solution = new Solution();
        System.out.println(solution.extractImage(str));
        
        sc.close();
    }
}
class Solution:
    def extract_image(self, s: str) -> str:
        # 查找最后一个[img]和[\img]的位置
        img_start = s.rfind("[img]")
        img_end = s.rfind("[\\img]")
        
        # 如果没有找到任何一个标签,或者[img]在[\img]后面
        if img_start == -1 or img_end == -1 or img_start > img_end:
            return "null"
        
        # 提取字符串
        return s[img_start:img_end + 6]

def main():
    s = input()
    solution = Solution()
    print(solution.extract_image(s))

if __name__ == "__main__":
    main()

算法及复杂度

  • 算法:字符串查找和截取
  • 时间复杂度:,其中 是字符串长度
  • 空间复杂度:,只使用了常数额外空间