125. 验证回文串

/*
* 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
* 输入: "A man, a plan, a canal: Panama"
输出: true
回文串:正读和反读都是一样的字符串。
* */

 public boolean isPalindrome2(String s){
// 对初始字符串进行预处理
s=s.toLowerCase();
int low=0;
int high=s.length()-1; while(low<high){
if(!Character.isLetterOrDigit(s.charAt(low))) low++;
else if(!Character.isLetterOrDigit(s.charAt(high))) high--;
else if(s.charAt(low)!=s.charAt(high)) return false;
else{
low++;
high--;
}
} return true;
}

  

28. 实现strStr()

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

暴力求解方法:

public int strStr(String haystack, String needle) {
// 暴力解法
if(needle.isEmpty()) return -1; final int N=haystack.length()-needle.length()+1;
for(int i=0;i<N;i++){
int j=i;
int k=0;
while(j<haystack.length() && k<needle.length() && haystack.charAt(j)==needle.charAt(k)){
k++;
j++;
}
if(k==needle.length()){
return i;
}
}
return -1;
}

 

67. 二进制求和

/*
* 给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。
* */

 public String addBinary(String a, String b) {
StringBuilder result=new StringBuilder();
int i=a.length()-1;
int j=b.length()-1;
int carry=0; while(i>=0 || j>=0 || carry>0){
int valueA=i<0 ? 0: a.charAt(i--)-'0';
int valueB=j<0 ? 0: b.charAt(j--)-'0';
int sum=valueA+valueB+carry;
result.insert(0, Character.forDigit(sum%2, 10));
carry=sum/2; }
return result.toString();
}

  

5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

策略:

A:暴力求解:时间复杂度是o(n*2)

B:记忆化搜索:复杂度 O(n^2) 。设 f[i][j] 表示[i,j]之间的最长回文子串,递推方程如下:

f[i][j] = if (i == j) S[i]
if (S[i] == S[j] && f[i+1][j-1] == S[i+1][j-1]) S[i][j]
else max(f[i+1][j-1], f[i][j-1], f[i+1][j])

C:动态规划算法:

设状态为 f(i,j) ,表示区间[i,j]是否为回文串,则状态转移方程为

	/*
* 动态规划问题经常用于求解最优子结构以及重叠子问题,以前我们经常将重叠子问题
* 使用递归进行实现,但是有问题的是,会进行大量重复的计算,而动态规划就是将之前的结果保存下来,避免了不必要的
* 重复操作,提升了效率。
*
* 实现原理:
* 借助一个二维布尔数组
* 每个dp[i][j]表示一个方格,每个方格中的T与F分别表示当前子串是否是
* 回文字符串。
* 再进行转换的时候,表达式即是str[i]==str[j] && dp[i+1][j-1]
* */ public String longestPalindrome3(String s){ int len=s.length();
int maxlen=0;
String res=null; boolean [][] dp=new boolean[len][len];
for(int i=len-1;i>=0;i--){
for(int j=i;j<len;j++){
dp[i][j]=s.charAt(i)==s.charAt(j) && (j-i<3 || dp[i+1][j-1]);
if(dp[i][j] && (res==null || j-i+1>maxlen)){
res=s.substring(i,j+1);
maxlen=res.length();
}
}
} return res;
}

  

leetCode 字符串相关问题的更多相关文章

  1. 常用linux 命令 -字符串相关

    参考网络文章,个人工作总结 题记:一般对字符串的操作有以下几种:求长度,截取字符串,拼接字符串,找字符串中某个字符的索引 1 expr 命令 1.1 定义 man 手册 Print the value ...

  2. 【Todo】字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树

    另开一文分析字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树. 先来一个汇总, 算法: 本文中提到的字符串匹配算法有:KMP, BM, Horspool, Sunday, BF, ...

  3. python中跟字符串相关的一些操作

    公司让用python自动生成代码,以前没看过python.所以匆匆的看了两天python就连猜带蒙就上马开干了..因此好多操作可能看的时候看懂了,用的时候知道有这么个东西,具体用法就忘记了..用到了就 ...

  4. LeetCode 字符串专题(一)

    目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...

  5. ES6字符串相关扩展

    变量的解构赋值 // 数组的解构赋值 let [a,b,c] = [1,2,3]; //1,2,3 let [a,b,c] = [,123,]; //undefined 123 undefined l ...

  6. Java数据结构和算法总结-字符串相关高频面试题算法

    前言:周末闲来无事,看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔 ...

  7. PHP基础系列(一) PHP字符串相关的函数分类整理

    PHP提供了非常丰富的自带函数,有人说PHP是一个大的函数库,在某种程度上我是非常认同这种观点的,这个也是PHP非常容易上手的原因之一.在使用PHP编程的时候,需要实现某一功能的时候,如果说php自带 ...

  8. 【leetcode 字符串处理】Compare Version Numbers

    [leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Com ...

  9. leetcode tree相关题目总结

    leetcode tree相关题目小结 所使用的方法不外乎递归,DFS,BFS. 1. 题100 Same Tree Given two binary trees, write a function ...

随机推荐

  1. js数组元素,获得某个元素的最大值。

    var rows=[{项次:1},{项次:2},{项次:3}]; Math.max.apply(Math, rows.map(function (o) { return o.项次 })) //结果:3 ...

  2. maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法

    问题: maven 打包时,有的文件打不进去target 解决: 因为maven打包默认打Java文件.在项目中的pom文件中加build标签 <build> <resources& ...

  3. Python3.6 提示 ModuleNotFoundError: No module named '_ssl' 模块问题

    国内 163 yum 源挺好用 (中科大的也不错) http://mirrors.163.com/.help/CentOS6-Base-163.repo yum install openssl-dev ...

  4. JL MTK 安防网关的 wifi 吞吐测试

    基本配置:   删除桥接中的 eth3 : brctl delif  br0 eth3   设置eth3的ip: ifconfig  eth3  192.168.1.100   开启数据转发: ech ...

  5. mysql新特性

    5.7新特性 sys库 document store X protocol json支持 空间数据 虚拟列 query rewrite plugin 表空间传输 innodb undo表空间 表空间管 ...

  6. flask基础三

    一.路由和视图(基础二上补充) (1)有参装饰器 路由采用的是有参装饰器实现的 @app.route("/index",methods=["GET"," ...

  7. RxSwift 操作符

    RxSwift 操作符 (throttle) https://blog.csdn.net/weixin_38318852/article/details/80334838 RxSwift 操作符 (w ...

  8. 转:彻底搞清楚javascript中的require、import和export

    原文地址:彻底搞清楚javascript中的require.import和export   为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Ja ...

  9. SM3杂凑算法Python语言实现——第三部分

    SM3杂凑算法实现--第三部分 一.SM3 密码概述        我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...

  10. [svc]简单理解什么是rpc调用?跟restapi有何区别?

    什么是rpc调用 restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post pu ...