字符串的最长严格递增子序列,前后只能相差一个字符。

  1. 直接O(N^2)暴力建图,然后记忆化跑个最长路。
  2. 直接按字符串长度排序,然后求LIS。

code1

class Solution {
public:
vector<int> g[1005];
bool check(string& a,string& b){
int as=a.size();
int bs=b.size();
if(bs!=as+1){
return false;
}
int cnt[26]={0};
for(int i=0;i<as;i++){
cnt[a[i]-'a']++;
}
for(int i=0;i<bs;i++){
cnt[b[i]-'a']--;
}
for(int i=0;i<26;i++){
if(cnt[i]!=0 && cnt[i]!=-1){
return false;
}
}
return true;
}
int dp[1005];
void dfs(int u){
if(dp[u]){
return;
}
int ans=0;
int siz=g[u].size();
for(int i=0;i<siz;i++){
int v=g[u][i];
dfs(v);
ans=max(ans,dp[v]);
}
dp[u]=ans+1;
return;
}
int longestStrChain(vector<string>& words) {
int n=words.size();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(check(words[i],words[j])){
cout << i <<" " <<j <<"\n";
g[i].push_back(j);
}
}
}
for(int i=0;i<n;i++){
dfs(i);
}
int ans=0;
for(int i=0;i<n;i++){
ans=max(ans,dp[i]);
}
return ans;
}
};

code2

bool cmp(string a,string b){
return a.size()<b.size();
}
class Solution {
public:
bool check(string& a,string& b){
int as=a.size();
int bs=b.size();
if(bs!=as+1){
return false;
}
int cnt[26]={0};
for(int i=0;i<as;i++){
cnt[a[i]-'a']++;
}
for(int i=0;i<bs;i++){
cnt[b[i]-'a']--;
}
for(int i=0;i<26;i++){
if(cnt[i]!=0 && cnt[i]!=-1){
return false;
}
}
return true;
}
int dp[1005];
int longestStrChain(vector<string>& words) {
int n=words.size();
sort(words.begin(),words.end(),cmp);
int ans=0;
for(int i=0;i<n;i++){
dp[i]=1;
}
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(check(words[j],words[i])){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);
}
return ans;
}
};

Leetcode_1048. 最长字符串链的更多相关文章

  1. 使用List把一个长字符串分解成若干个短字符串

    把一个长字符串分解成若干个固定长度的短字符串,由于事先不知道长字符串的长度,以及短字符串的数量,只能使用List. public static void get_list_sbody(String s ...

  2. eclipse处理长字符串拼接快捷方法类

    情景: 你在后台写sql文访问数据库时是不是要这样写 String sql="select a," +"b," +"c " +"f ...

  3. JSP-简单的练习省略显示长字符串

    <%@ page contentType="text/html; charset=gb2312" %> <!-- JSP指令标签 --> <%@ pa ...

  4. newcoder-最长树链-树/gcd

    https://ac.nowcoder.com/acm/problem/13233 链接:https://ac.nowcoder.com/acm/problem/13233来源:牛客网 题目描述 树链 ...

  5. python-原始字符串,长字符串

    一  长字符串 在python中要表示跨行多行的字符串,可以使用较为简单粗暴的表达-----三引号.例如: str = ”’那时我们有梦, 关于文学, 关于爱情, 关于穿越世界的旅行. 如今我们深夜饮 ...

  6. Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  7. C 长字符串换行方法

    C中字符串有时候会出现很长的情况,如果不换行书写查看起来很不方便. 长字符串拆分成多行处理也是C规范的一部分. 方法1. 利用双引号" " ,将长字符串分成多个子串换行,C会自动无 ...

  8. HDU 3336 输出包括从1到len长 字符串前缀的总个数(+DP)

    Sample Input14abab Sample Output6输出包括从1到len长 字符串前缀的总个数abab:包括2个a,2个ab,1个aba,1个abab # include <cst ...

  9. go语言判断末尾不同的长字符串的方法

    判断两种末尾不同的长字符串,在使用正则表达式的基础上,进一步利用好字符串的方法,最后成功对问题进行解决. package utils import ( "io/ioutil" &q ...

随机推荐

  1. springboot oauth 鉴权之——password鉴权相当于jwt鉴权模式

    近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...

  2. SpringMVC之参数绑定

    1.Controller package com.tz.controller; import org.springframework.beans.factory.annotation.Required ...

  3. WWW 2015:一个神奇的会议

    2015:一个神奇的会议" title="WWW 2015:一个神奇的会议"> 作者:微软亚洲研究院研究员 袁进辉 WWW 2015(24th Internatio ...

  4. GDB调试指南-单步调试

    前言 前面通过<启动调试>,<断点设置>,<变量查看>,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容.在启 ...

  5. 快速入门和查询Python

    评分: 4.5 作者: Ryan Lu 类别:Python 时间: 1. 注释 三种方式: 单行注释以 # 开头 多行注释用三个单引号 ''' 将注释括起来 多行注释用三个双引号 "&quo ...

  6. clearstatcache清除文件状态缓存

    当使用下列任何函数时stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir( ...

  7. C++扬帆远航——7(年月日)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:charizi.cpp * 作者:常轩 * 完成日期:2016年 ...

  8. c#百度IP定位API使用方法

    c#百度IP定位API使用方法 1.先建立一个收集信息的实体类 IPModel.cs: using System; using System.Collections.Generic; using Sy ...

  9. 7-19 计算有n个字符串中最长的字符串长度 (40 分)

    编写程序,用于计算有n(1<n<10)个字符串中最长的字符串的长度.前导空格不要计算在内! 输入格式: 在第一行中输入n,接下的每行输入一个字符串 输出格式: 在一行中输出最长的字符串的长 ...

  10. 面试题57-II.和为s的连续正数序列

    面试题57-II.和为s的连续正数序列 1.题目 LeetCode-面试题57-II.和为s的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数 ...