python算法demo0512

最长回文数

在这里插入图片描述

代码

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        if n < 2:
            return s
        
        max_len = 1
        begin = 0
        # dp[i][j] 表示 s[i..j] 是否是回文串
        dp = [[False] * n for _ in range(n)]
        for i in range(n):
            dp[i][i] = True
        
        # 递推开始
        # 先枚举子串长度
        for L in range(2, n + 1):
            # 枚举左边界,左边界的上限设置可以宽松一些
            for i in range(n):
                # 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得
                j = L + i - 1
                # 如果右边界越界,就可以退出当前循环
                if j >= n:
                    break
                    
                if s[i] != s[j]:
                    dp[i][j] = False 
                else:
                    if j - i < 3:
                        dp[i][j] = True
                    else:
                        dp[i][j] = dp[i + 1][j - 1]
                
                # 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置
                if dp[i][j] and j - i + 1 > max_len:
                    max_len = j - i + 1
                    begin = i
        return s[begin:begin + max_len]



  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的 Python 推荐算法 demo,用于基于用户相似性进行电影推荐: ```python # 导入必要的库 import numpy as np import pandas as pd # 创建评分数据集 ratings_data = { 'user_id': ['user1', 'user1', 'user1', 'user2', 'user2', 'user2'], 'movie_id': ['movie1', 'movie2', 'movie3', 'movie1', 'movie2', 'movie3'], 'rating': [5, 3, 4, 4, 2, 1] } ratings_df = pd.DataFrame(ratings_data) # 创建用户相似度矩阵 users = np.unique(ratings_df['user_id']) num_users = len(users) similarity_matrix = np.zeros((num_users, num_users)) for i in range(num_users): for j in range(num_users): user1_ratings = ratings_df[ratings_df['user_id'] == users[i]]['rating'] user2_ratings = ratings_df[ratings_df['user_id'] == users[j]]['rating'] similarity_matrix[i,j] = np.corrcoef(user1_ratings, user2_ratings)[0,1] # 获取目标用户的相似用户列表 target_user = 'user1' target_user_index = np.where(users == target_user)[0][0] similar_users_index = np.argsort(similarity_matrix[target_user_index])[::-1][1:] # 获取目标用户未评分的电影列表 target_user_unrated_movies = ratings_df[ratings_df['user_id'] == target_user]['movie_id'] all_movies = np.unique(ratings_df['movie_id']) target_user_unrated_movies = np.setdiff1d(all_movies, target_user_unrated_movies) # 计算电影推荐度 recommendations = {} for movie in target_user_unrated_movies: rating_sum = 0 similarity_sum = 0 for similar_user_index in similar_users_index: similar_user_rating = ratings_df[(ratings_df['user_id'] == users[similar_user_index]) & (ratings_df['movie_id'] == movie)]['rating'] if len(similar_user_rating) > 0: similarity = similarity_matrix[target_user_index, similar_user_index] rating_sum += similarity * similar_user_rating.values[0] similarity_sum += similarity if similarity_sum > 0: recommendations[movie] = rating_sum / similarity_sum # 输出电影推荐列表 if len(recommendations) > 0: sorted_recommendations = sorted(recommendations.items(), key=lambda x: x[1], reverse=True) print('电影推荐列表:') for recommendation in sorted_recommendations: print(recommendation[0]) else: print('没有电影可以推荐!') ``` 以上代码使用 Pearson 相关系数计算用户相似度,然后使用加权平均值计算电影推荐度。可以根据具体需求修改代码中的相似度计算方法和推荐度计算方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松のblog

下一个构架师就是你~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值