首页 > 编程语言 >算法——字符串(一)

算法——字符串(一)

时间:2023-06-02 12:11:06浏览次数:26  
标签:index return 10 int length strs 算法 字符串

1、给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

 1 class Solution {
 2     public int lengthOfLongestSubstring(String s) {
 3         int len=s.length();
 4         int max=0;
 5         int right=0;
 6         Set<Character> set=new HashSet<>();
 7         for(int i=0;i<len;i++){//左边界
 8             if(i!=0)set.remove(s.charAt(i-1));
 9             while(right<len&&!set.contains(s.charAt(right))){
10                 set.add(s.charAt(right));
11                 right++;
12 
13             }
14             max=Math.max(max,right-i);
15         }
16         return max;
17     }
18 }
View Code

2、给你一个字符串 s,找到 s 中最长的回文子串。

 1 //中心扩散法
 2 class Solution {
 3     public String longestPalindrome(String s) {
 4         if (s == null || s.length() < 1) {
 5             return "";
 6         }
 7         int start = 0, end = 0;
 8         for (int i = 0; i < s.length(); i++) {
 9             int len1 = expandAroundCenter(s, i, i);
10             int len2 = expandAroundCenter(s, i, i + 1);
11             int len = Math.max(len1, len2);
12             if (len > end - start) {
13                 start = i - (len - 1) / 2;
14                 end = i + len / 2;
15             }
16         }
17         return s.substring(start, end + 1);
18     }
19 
20     public int expandAroundCenter(String s, int left, int right) {
21         while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
22             --left;
23             ++right;
24         }
25         return right - left - 1;
26     }
27 }
View Code

3、字符串转整数

 1 class Solution {
 2     public int myAtoi(String str) {
 3         int len = str.length();
 4         // str.charAt(i) 方法回去检查下标的合法性,一般先转换成字符数组
 5         char[] charArray = str.toCharArray();
 6 
 7         // 1、去除前导空格
 8         int index = 0;
 9         while (index < len && charArray[index] == ' ') {
10             index++;
11         }
12 
13         // 2、如果已经遍历完成(针对极端用例 "      ")
14         if (index == len) {
15             return 0;
16         }
17 
18         // 3、如果出现符号字符,仅第 1 个有效,并记录正负
19         int sign = 1;
20         char firstChar = charArray[index];
21         if (firstChar == '+') {
22             index++;
23         } else if (firstChar == '-') {
24             index++;
25             sign = -1;
26         }
27 
28         // 4、将后续出现的数字字符进行转换
29         // 不能使用 long 类型,这是题目说的
30         int res = 0;
31         while (index < len) {
32             char currChar = charArray[index];
33             // 4.1 先判断不合法的情况
34             if (currChar > '9' || currChar < '0') {
35                 break;
36             }
37 
38             // 题目中说:环境只能存储 32 位大小的有符号整数,因此,需要提前判:断乘以 10 以后是否越界
39             if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)) {
40                 return Integer.MAX_VALUE;
41             }
42             if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))) {
43                 return Integer.MIN_VALUE;
44             }
45 
46             // 4.2 合法的情况下,才考虑转换,每一步都把符号位乘进去
47             res = res * 10 + sign * (currChar - '0');
48             index++;
49         }
50         return res;
51     }
52 }
View Code

4、最长公共前缀

 1 //纵向扫描
 2 class Solution {
 3     public String longestCommonPrefix(String[] strs) {
 4         if (strs == null || strs.length == 0) {
 5             return "";
 6         }
 7         int length = strs[0].length();//第一个字符串的长度
 8         int count = strs.length;
 9         for (int i = 0; i < length; i++) {
10             char c = strs[0].charAt(i);
11             for (int j = 1; j < count; j++) {
12                 if (i == strs[j].length() || strs[j].charAt(i) != c) {
13                     return strs[0].substring(0, i);
14                 }
15             }
16         }
17         return strs[0];
18     }
19 }
View Code

 

标签:index,return,10,int,length,strs,算法,字符串
From: https://www.cnblogs.com/coooookie/p/17451405.html

相关文章

  • 最短路与生成树算法
    写在前面最短路部分的代码还是3月的,奇丑无比,大家见谅……最短路单源最短路径首先我们介绍一些基本概念。由于是单源最短路,我们定义一个起点\(s\),\(dis_u\)表示起点\(s\)到节点\(u\)的最短路长度。一般来讲,对于一条为\(w\)的边\(u\tov\),如果目前的最短路是正确......
  • 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树
    [参考链接]669.修剪二叉搜索树 [代码]1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right......
  • python算法学习——第1天
    目录1、3,5,7的倍数判定2、鸡兔同笼3、计算有n个字符串中最长的字符串长度4、输出10个不重复的英文字母5、统计一段文字的单词个数并按字母顺序排序输出6、字典合并7、最大公约数&最小公倍数8、输出全排列9、输出<=n的全部回文数10、重复元素判定1、3,5,7的倍数判定num=int(inp......
  • STL algorithm算法
    Functionsin<algorithm>Non-modifyingsequenceoperations:all_ofTestconditiononallelementsinrange(functiontemplate)any_ofTestifanyelementinrangefulfillscondition(functiontemplate)none_ofTestifnoelementsfulfillconditi......
  • 剑指 Offer 67. 把字符串转换成整数
    题目描述:写一个函数StrToInt,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合......
  • 十、python字符串str
    十、python字符串str1.字符串的定义与输入在python中,用引号引起来的都是字符串。还有input函数输入的,str()函数转换的等。string1="hello"string2='hello'string3="""hellopython"""string4='''helloworld'''string5=input(......
  • 算法学习day39动态规划part02-62、63
    packageLeetCode.DPpart02;/***62.不同路径*一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。*机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。*问总共有多少条不同的路径?*示例:*输入......
  • 算法学习day41动态规划part03-343、96
    packageLeetCode.DPpart03;/***343.整数拆分*给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。*返回你可以获得的最大乘积。*示例:*输入:n=2*输出:1*解释:2=1+1,1×1=1。**/publicclassIntegerBre......
  • 算法题——数组(一)
    1、两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。/*建一个hash表,key存放值,value存放下标遍历数组,如果表里存在target-nums[i],则返回下标不存在则把当前的数存到hash表*/cl......
  • 算法之二分法、三元表达式、列表生成式、字典生成式(了解)、匿名函数、常见的内置函数
    算法之二分法二分概念二分算法,又称折半查找,即在一个单调有序的集合中查找一个解。每次分为左右两部分,判断解在哪个部分中并调整上下界,直到找到目标元素,每次二分后都将舍弃一半的查找空间。定义and实现:算法就是解决问题的高效办法常见的算法:二分法算法还可以锻炼我们的......