Java 的 String 类基本用法介绍:http://www.runoob.com/java/java-string.html

Java 的 String.substring 函数:https://beginnersbook.com/2013/12/java-string-substring-method-example/

Google coding style:https://google.github.io/styleguide/javaguide.html

String 不支持下标索引的方式访问,所以需要使用charAt(i)的方式访问对应位置的字符。同时也就没有办法使用下标的方式对String进行修改。

String是一种不可变类,字符串一但生成就不能被改变。例如我们使用**‘+’进行字符串连接,会产生新的字符串,原串不会发生任何变化;使用replace()** 进行替换某些字符的时候也是产生新的字符串,不会更改原有字符串。

https://leetcode.com/problems/valid-palindrome/submissions/

 1 class Solution {
 2     public boolean isValid(char c){
 3         return (Character.isLetter(c) || Character.isDigit(c));
 4     }
 5
 6     public boolean isPalindrome(String Ss) {
 7         String s=Ss.toLowerCase();
 8         int sl=s.length();
 9         int xl=0, xr=sl-1;
10         boolean res=true;
11         while(xl<xr){
12             while(xl<sl && (!isValid(s.charAt(xl))))     xl+=1;
13             while(xr>=0 && (!isValid(s.charAt(xr))))     xr-=1;
14             if(xr<0 || xl>=sl)
15                 break;
16             if(s.charAt(xl)!=s.charAt(xr)){
17                 res=false;
18                 break;
19             }
20             xl+=1;
21             xr-=1;
22         }
23         return(res);
24     }
25 }

Rabin-Karp Algorithm:在字符串中找子串

算法原理:

Ref: https://www.jianshu.com/p/68cbe955103e

https://leetcode.com/problems/implement-strstr/

 1 class Solution {
 2     public int MOD=1000000;
 3     public int INC=31;
 4     public int strStr(String src, String dsc) {
 5         if(src==null || dsc==null)
 6             return -1;
 7         int dl=dsc.length(), sl=src.length();
 8         if(dl==0)
 9             return 0;
10
11         int power=1;
12         for(int i=0;i<dl;i++)
13             power=(power*INC)%MOD;
14
15         int dschash=0;
16         for(int i=0;i<dl;i++)
17             dschash = (dschash*INC + dsc.charAt(i)) % MOD;      //hash code of dsc
18
19         int srchash=0;
20         for(int i=0;i<sl;i++){
21             srchash = (srchash*INC + src.charAt(i)) % MOD;      //calculate hash of src
22             if(i<dl-1)
23                 continue;
24             else if(i>=dl){
25                 srchash = srchash - (src.charAt(i-dl) * power) % MOD;
26                 while(srchash<0)
27                     srchash += MOD;
28             }
29             if(srchash == dschash){         //hash(src[i-m+1..i]) == hash(dsc)
30                 if(src.substring(i-dl+1, i+1).equals(dsc))
31                     return(i-dl+1);
32             }
33         }
34
35         return(-1);
36     }
37 }

子数组与前缀和

https://leetcode.com/problems/maximum-subarray/

使用前缀和,令p[i]=sum{ A[0]...A[i-1] }(p[0]=0,这个是为了方便后面计算用),那么就有sum{A[i]...A[j]} = p[j+1]-p[i]

设f[j]表示所有以A[j]结尾的子数组中最大的subarray,那么就有f[j] = p[j+1] - min{ p[0]...p[j] }

单纯的计算某个f[j]的时间复杂度是O(N)的,但其实计算好f[j]后,可以用O(1)的时间再计算出f[j+1]。所以整体的时间复杂度仍然是O(N)的。

 1 class Solution {
 2     public int maxSubArray(int[] nums) {
 3         int nl=nums.length;
 4         int[] prefix=new int[nl+1];
 5         prefix[0]=0;
 6         for(int i=1;i<nl+1;i++)
 7             prefix[i]=prefix[i-1]+nums[i-1];
 8
 9         int[] f=new int[nl];
10         int minp=0;
11
12         for(int i=0;i<nl;i++){
13             minp=Math.min(minp, prefix[i]);
14             f[i]=prefix[i+1]-minp;
15         }
16
17         int ans=f[0];
18         for(int i=1;i<nl;i++)
19             ans=Math.max(ans, f[i]);
20         return(ans);
21     }
22 }

https://www.lintcode.com/problem/subarray-sum/description

Q:找和为0的subarray

A:求出prefix[],用hashmap找里面相等的元素。O(N)

https://www.lintcode.com/problem/subarray-sum-closest/description

Q:找和最接近0的subarray

A:求出prefix[],找prefix[]中最接近的两个元素(排序)。 O(NlogN)

其他

UNDER CONSTRUCTION

https://leetcode.com/problems/subsets/

https://leetcode.com/problems/subsets-ii/

转载于:https://www.cnblogs.com/pdev/p/11163685.html

Lect1 String相关题目相关推荐

  1. 大数据技术之_31_Java 面试题_02_== 和 equals 有什么区别 + String 相关 + 多态 + 传值 + static 加载机制 + 线程

    大数据技术之_31_Java 面试题_02 1.== 和 equals 有什么区别? 2.为什么需要同时覆写 hashCode 和 equals 方法? 3.为什么用 eclipse 重写 hashC ...

  2. 数据结构——栈与队列相关题目

    数据结构--栈与队列相关题目 232. 用栈实现队列 思路 225. 用队列实现栈 1.两个队列实现栈 2.一个队列实现栈 20. 有效的括号 思路 1047. 删除字符串中的所有相邻重复项 思路 1 ...

  3. 算法思想-深度搜索算法-leetcode相关题目总结

    通过这篇文章你能学到什么 搜索算法 深度优先搜索 分析过程 实现代码 进出栈过程示意图 DFS算法应用-Leetcode相关题目 Leetcode 78 Subsets Leetcode 90 Sub ...

  4. JAVA基础5——与String相关的系列(1)

    与String相关的系列 String, 是JAVA中常见的一个引用类型,且其具有一定的特殊性. String类型被设置为final型,即不可继承,也就不可修改其中的实现. String可以改变吗 S ...

  5. boost::mpl::string相关的测试程序

    boost::mpl::string相关的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::string相关的测试程序 C++实现代码 #include <string> ...

  6. 散列表相关题目(线性探测再散列法)

    散列表相关题目(线性探测再散列法) 一.题目 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key×3) ...

  7. 面试必考的网络协议相关题目应该如何回答

    转载自  面试必考的网络协议相关题目应该如何回答 最近,正处于校招季.很多小伙伴已经拿到了如愿以偿的Offer,有些小伙伴还在努力着. 平常,也会有一些粉丝会在公众号留言,或者在微信上问我一些面试题. ...

  8. c++ string 长度限制_面试中要会的String相关问题

    在java面试中,String是面试官最喜欢问,甚至是最先问的问题.这是在考验你的基本功,也是考验你的能力.String都答不上来,下面就不用继续了.我总结一些String相关的试题,希望对大家在以后 ...

  9. [Leetcode][分治法]相关题目汇总/分析/总结

    题目汇总 以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充. 目前范围:Leetcode前150题 分治法相关题目 两个排序数组的中位数 请找出这两个有序数组的中位数.要求算法的时间复杂 ...

最新文章

  1. 软件工程实践第二次作业——个人项目实战(数独)
  2. 分辨率快速切换工具,以及源码.
  3. 全球移动SaaS市场规模5年将增170亿美元
  4. U3D MonoBehaviour
  5. 白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
  6. linux笔记之 搭建本地yum源,网卡的基本操作
  7. java程序员必看经典书单,以及各个阶段学习建议
  8. Neural Volumes Rendering(一)
  9. HTTP协商缓存与HTTP强缓存
  10. [转载] python 如何判断中文的字符串长度
  11. MySQL自定义函数用法详解-复合结构自定义变量/流程控制
  12. 双管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好的程序,免费下载)
  13. 昭通脱贫致富-农业大健康·林裕豪:从玉农业谋定“责任”
  14. 【有料c++题目周刊 | 第一期】希腊诸神
  15. php 微信二维码设置中间logo
  16. 理财入门-读《小狗钱钱》有感
  17. oschina 公司已成立
  18. STG74S-E1G000-1-A-AHS霍尼韦尔压力变送器
  19. 【工作】引用文献(医学文献注意事项)
  20. EasyCVR新版本v2.6.0调用接口获取视频流的方法变更

热门文章

  1. 14.运算符(operator)
  2. 【转】JS VLC插件
  3. 解析儿童编程中的基本概念与目标
  4. Mysql的常见面试题 + 索引原理分析
  5. 计算机会计二级科目,(完整版)会计科目一览表(一级科目二级科目三级科目)..pdf...
  6. vivado仿真出错
  7. 中英文说明丨质膜H+ATP酶AS07 260介绍
  8. 五 、Kotlin学习之命名参数默认参数
  9. 语音识别-人工智能实验室旗下语音识别频道,汇集最新最全的语音识别新闻及资讯,让您掌握语音识别第一手的资讯-中国人工智能网-Powered by www.AiLab.cn
  10. 不用看了,赶紧跟着敲一遍!