leedcode刷题笔记——数据结构(字符串)

1.最长公共子前缀

leedcode刷题笔记——数据结构(字符串)_第1张图片
思路: 这个题思路是比较好想的。先检查数组是否为空,为空则直接返回“”。然后拿第一个字符串跟后面的字符串进行比较,若存在公共子前缀则用它更新,作为比较的字符串进行后续的比较。最后判断一下得到的公共子前缀是否为空。
这里需要用到关于字符串的函数:
①charAt(int index):返回指定位置的字符。第一个字符位置为 0, 第二个字符位置为 1,以此类推.
②返回字符串的子字符串
substring(int beginIndex)
substring(int beginIndex, int endIndex)这里不包含endindex代表的字符
③length():返回字符串的长度。String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数
需要区别于数组长度,例如数组a的长度:a.length
④字符串比较需要用函数:equals(Object a)
代码实例:

class Solution {
     public String longestCommonPrefix(String[] strs) {
		 if(strs.length==0)
			 return "";
		 String temp=strs[0];
		 for(int i=1;i<strs.length;i++) {
			 int j=0;
			 for(;j<temp.length()&&j<strs[i].length();j++) {
				 if(temp.charAt(j)!=strs[i].charAt(j))
					 break;
			 }
			 temp=temp.substring(0,j);
			 if(temp.equals(""))
				 return temp;
		 }
		 return temp;

	    }
}

2.最长回文子串

leedcode刷题笔记——数据结构(字符串)_第2张图片
思路:
方法①动态规划:回文串正序逆序后都是一样的。所以可以把字符串逆序之后,正序串跟逆序串对比,找出最长公共字符串。不过最后需要判断一下。
在这里插入图片描述以防这种情况的出现,也存在公共子串,其实不是回文串,这个需要判断一下串的位置就好。
需要注意防止越界
leedcode刷题笔记——数据结构(字符串)_第3张图片
代码实例:

class Solution {
   public String longestPalindrome(String s) {
		if(s.equals(""))
			return "";
		String before =s;
		String reverse=new StringBuffer(s).reverse().toString();
		int l=s.length();
		//定义二维数组存储公共字符串的长度
		int [][]temp=new int[l][l];
		int maxl=0;
		int maxend=0;
		//动态规划寻找最长公共字符串
		for(int i=0;i<l;i++) {
			for(int j=0;j<l;j++) {
				if(before.charAt(i)==reverse.charAt(j)) {
					if (i==0||j==0) {
						temp[i][j]=1;
						
					}
                    else{
                       temp[i][j]=temp[i-1][j-1]+1;                        
                    }
				
				}
				if (temp[i][j]>maxl) {					
					int br=s.length()-1-j;
					if(i==br+temp[i][j]-1){
                        maxl=temp[i][j];
                        maxend=i;
                    }
						
				}
			}
			
			
		}
		return before.substring(maxend-maxl+1, maxend+1);
		

    }
}

方法

你可能感兴趣的:(leedcode刷题总结,java,字符串)